• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • LeetCode學習筆記(6) 第124題 Binary Tree Maximum Path Sum

    標簽: 二叉樹  leetcode  算法  python  

    題目

    在這里插入圖片描述
    在這里插入圖片描述

    分析

    在這里插入圖片描述
    和上一篇LeetCode算法題很像。使用遞歸來解。注意只有一個節點時且節點為負數,不能直接返回0
    Time Complexity:O(n)
    Space ComplexityO(h)

    流程

    定義一個子函數分別處理子樹返回子樹的sum,記錄最大和。 
    

    代碼

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
     *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
     *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
     * };
     */
    class Solution {
    public:
        int maxPathSum(TreeNode* root) {
            int ans = INT_MIN;
            maxPathFun(root, ans);
            return ans;
        }
        int maxPathFun(TreeNode* root, int& ans){
            if(!root)
                return 0;
            int l = max(0, maxPathFun(root->left, ans));
            int r = max(0, maxPathFun(root->right, ans));
            int sum = root->val + l + r;
            ans = max(ans, sum);
            return root->val + max(l, r);
            
        }
    };
    

    python版

    # Definition for a binary tree node.
    # class TreeNode(object):
    #     def __init__(self, val=0, left=None, right=None):
    #         self.val = val
    #         self.left = left
    #         self.right = right
    class Solution(object):
        def __init__(self):
            self.ans = float('-inf')
        def maxPathSum(self, root):
            """
            :type root: TreeNode
            :rtype: int
            """
            def sum(root):
                if root is None:
                    return 0
                l = max(0, sum(root.left))
                r = max(0, sum(root.right))
                s = l + r + root.val
                self.ans = max(self.ans, s)
                return max(l, r) + root.val
            sum(root)
            return self.ans
    
    版權聲明:本文為weixin_39278430原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/weixin_39278430/article/details/109468901

    智能推薦

    leetcode 124. Binary Tree Maximum Path Sum

    Binary Tree Maximum Path Sum 題目描述 找出盡可能使得和最大的路徑(所有點需要連接) 解題思路 設計遞歸函數findPathSum(node),傳入節點,節點為空時停止遞歸,返回到傳入節點(左右子節點)為止積累的最大和。 如圖左半部分,每次計算三個值: sumLeft:根節點和左子樹的和 sumRight:根節點和右子樹的和 sumAll:根節點和左右子樹的和 計算當前...

    ?LeetCode 124. Binary Tree Maximum Path Sum

    文章目錄 題目描述 知識點 實現 碼前思考 代碼實現 碼后反思 題目描述 知識點 樹形DP 實現 碼前思考 看見最優化的問題,我們基本上是要思考一下能不能使用DP來進行求解,雖然可能有時不行,但是一定要先思考能不能用DP,不能沒有嘗試就放棄DP思想; 這其實是一類非常常見的DP思想,為什么說常見呢?因為這個問題可以很好的轉換成另外的問題; 問題轉化 原始的問題其實我們是很難使用動態規劃的,我們需要...

    【leetcode】124.Binary Tree Maximum Path Sum

    「思路」 將問題轉化為兩個部分,第一部分為maxsum函數,實現以不同節點作為根節點的最大結果,并不斷更新最大結果。第二部分為downsum函數,由于maxsum函數確定了根節點,所以downsum負責以固定點為根節點向下傳遞時路徑最大的和。 但是這種辦法導致超時。 「改進一」 查了一下網上的代碼,先計算出左右節點的最大值,如果左右節點大于0,則加上左右節點,否則不加。最后返回根節點,根節點加左子...

    LeetCode------Binary Tree Maximum Path Sum

    求二叉樹的最大路徑和是一道蠻有難度的題,難就難在起始位置和結束位置可以為任意位置,我當然是又不會了,于是上網看看大神們的解法,像這種類似數的遍歷的題,一般來說都需要用DFS來求解,我們先來看一個簡單的例子: 由于這是一個很簡單的例子,我們很容易就能找到最長路徑為7-11-4-13,那么怎么用遞歸來找出正確的路徑和呢?根據以往的經驗,樹的遞歸解法一般都是遞歸到葉節點,然后開始邊處理邊回溯到根節點。那...

    猜你喜歡

    Binary Tree Maximum Path Sum

    1,題目要求 Given a non-empty binary tree, find the maximum path sum. For this problem, a path is defined as any sequence of nodes from some starting node to any node in the tree along the parent-child con...

    124. Binary Tree Maximum Path Sum(圖解)

    124. Binary Tree Maximum Path Sum Given a non-empty binary tree, find the maximum path sum. For this problem, a path is defined as any sequence of nodes from some starting node to any node in the tree...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    精品国产乱码久久久久久蜜桃不卡