【LeetCode & 劍指offer刷題】樹題10:124. Binary Tree Maximum Path Sum
阿新 • • 發佈:2019-01-05
【LeetCode & 劍指offer 刷題筆記】目錄(持續更新中...)
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 along the parent-child connections. The path must contain/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ /* 問題:找二叉樹中和最大的路徑(起始位置和結束位置可以為任意位置) 有點類似42 連續子陣列的最大和(53. Maximum Subarray) */ class Solution { public : int maxPathSum ( TreeNode * root ) { int res = INT_MIN ; helper ( root , res ); //用res變數儲存結果 return res ; } int helper ( TreeNode * node , int & res ) { if (! node ) // 結點為空直接返回 0 return 0 ; // 計算左右子樹的最大路徑和 int left = max ( helper ( node -> left , res ), 0 ); // 如果選 0 ,表示不加該子樹(子樹和為負數) int right = max ( helper ( node -> right , res ), 0 ); // 更新全域性最大值 res = max ( res , left + right + node -> val ); // 該全域性最大值作為總結果最後輸出(通過遞迴遍歷,可以覆蓋到經過node的所有路徑,node也在變,故可以得到所有路徑) // 返回結果 return max ( left , right ) + node -> val ; //遞迴函式 返回值的定義是以當前結點為終點的path 之和,所以只能取 left 和 right 中較大的那個值,而不是兩個都要 } };