【題目描述】
給出一棵二叉樹,尋找一條路徑使其路徑和最大,路徑可以在任一節點中開始和結束(路徑和爲兩個節點之間所在路徑上的節點權值之和)。
Given a binary tree, find the maximum path sum.
The path may start and end at any node in the tree.
【題目鏈接】
www.lintcode.com/en/problem/binary-tree-maximum-path-sum/
【題目解析】
首先分析一下對於指定某個節點爲根時,最大的路徑和有可能是哪些情況。第一種是左子樹的路徑加上當前節點,第二種是右子樹的路徑加上當前節點,第三種是左右子樹的路徑加上當前節點(相當於一條橫跨當前節點的路徑),第四種是隻有自己的路徑。
乍一看似乎以此爲條件進行自下而上遞歸就行了,然而這四種情況只是用來計算以當前節點根的最大路徑,如果當前節點上面還有節點,那它的父節點是不能累加第三種情況的。所以要計算兩個最大值,一個是當前節點下最大路徑和,另一個是如果要連接父節點時最大的路徑和。用前者更新全局最大量,用後者返回遞歸值就行了。
【參考答案】
www.jiuzhang.com/solutions/binary-tree-maximum-path-sum/