LintCode-二叉樹中的最大路徑和

描述

給出一棵二叉樹,尋找一條路徑使其路徑和最大,路徑可以在任一節(jié)點中開始和結束(路徑和為兩個節(jié)點之間所在路徑上的節(jié)點權值之和)

樣例

給出一棵二叉樹:

   1
  / \
 2   3

返回 6

代碼

"""
Definition of TreeNode:
class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left, self.right = None, None
"""

class Solution:
    """
    @param root: The root of binary tree.
    @return: An integer
    """
    def maxPathSum(self, root):
        # write your code here
        self.maxPath = root.val
        self.Dfs(root)
        return self.maxPath
    
    def Dfs(self, root):
        # TODO: write code...
        if root is None:
            return 0
        left = max(0, self.Dfs(root.left))
        right = max(0, self.Dfs(root.right))
        leap = left + root.val + right
        if leap > self.maxPath:
            self.maxPath = leap
        return max(left + root.val, right + root.val)

仔細想,發(fā)現(xiàn)從任意節(jié)點開始和結束,其實就意味最大路徑和可以選擇子樹的根節(jié)點作為計算路徑和的開始,則

leap = left + root.val + right
        if leap > self.maxPath:
            self.maxPath = leap

就表達出了最大路徑可以是任意子樹的經過根節(jié)點的最大路徑和。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 題目 給出一棵二叉樹,尋找一條路徑使其路徑和最大,路徑可以在任一節(jié)點中開始和結束(路徑和為兩個節(jié)點之間所在路徑上的...
    六尺帳篷閱讀 460評論 0 4
  • 給出一棵二叉樹,尋找一條路徑使其路徑和最大,路徑可以在任一節(jié)點中開始和結束(路徑和為兩個節(jié)點之間所在路徑上的節(jié)點權...
    Arnold134777閱讀 1,007評論 0 0
  • 給出一棵二叉樹,尋找一條路徑使其路徑和最大,路徑可以在任一節(jié)點中開始和結束(路徑和為兩個節(jié)點之間所在路徑上的節(jié)點權...
    鬼谷神奇閱讀 1,196評論 0 1
  • 樹的概述 樹是一種非常常用的數據結構,樹與前面介紹的線性表,棧,隊列等線性結構不同,樹是一種非線性結構 1.樹的定...
    Jack921閱讀 4,764評論 1 31
  • 一大早就困的不行不行的,這可怎么辦?
    轉身一千一百年閱讀 187評論 0 1

友情鏈接更多精彩內容