【題目描述】
給出一棵二叉樹,尋找一條路徑使其路徑和最大,路徑可以在任一節(jié)點中開始和結束(路徑和為兩個節(jié)點之間所在路徑上的節(jié)點權值之和)。
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/
【題目解析】
首先分析一下對于指定某個節(jié)點為根時,最大的路徑和有可能是哪些情況。第一種是左子樹的路徑加上當前節(jié)點,第二種是右子樹的路徑加上當前節(jié)點,第三種是左右子樹的路徑加上當前節(jié)點(相當于一條橫跨當前節(jié)點的路徑),第四種是只有自己的路徑。
乍一看似乎以此為條件進行自下而上遞歸就行了,然而這四種情況只是用來計算以當前節(jié)點根的最大路徑,如果當前節(jié)點上面還有節(jié)點,那它的父節(jié)點是不能累加第三種情況的。所以要計算兩個最大值,一個是當前節(jié)點下最大路徑和,另一個是如果要連接父節(jié)點時最大的路徑和。用前者更新全局最大量,用后者返回遞歸值就行了。
【參考答案】