LeetCode124. 二叉樹中的最大路徑和c++
阿新 • • 發佈:2019-01-26
給定一個非空二叉樹,返回其最大路徑和。
本題中,路徑被定義為一條從樹中任意節點出發,達到任意節點的序列。該路徑至少包含一個節點,且不一定經過根節點。
示例 1:
輸入: [1,2,3]
1
/ \
2 3
輸出: 6
示例 2:
輸入: [-10,9,20,null,null,15,7]
-10
/ \
9 20
/ \
15 7
輸出: 42
遞迴,最大值更新為max(上一個最大值,左節點+右節點+當前val,左+val,右+val)。返回的是左節點,右節點,0中最大值,代表路徑包含左節點,右節點,以及路徑在此停止。max更新就是考慮所有情況,而每次遞迴返回的時候不需要考慮左+右+val,因為已經確保路徑跑到當前節點的父節點了,當然返回值就是經過該節點的最大路徑部分值。
class Solution { public: int maxl=-100000; int maxPathSum(TreeNode* root) { maxmid(root); return maxl; } int maxmid(TreeNode* root){ if(root==NULL) return 0; int i=maxmid(root->left); int j=maxmid(root->right); int t=minmax({i,j,0}).second+root->val; maxl=minmax({t,maxl,i+j+root->val,root->val}).second; return t; } };