1. 程式人生 > >LeetCode124. 二叉樹中的最大路徑和c++

LeetCode124. 二叉樹中的最大路徑和c++

給定一個非空二叉樹,返回其最大路徑和。

本題中,路徑被定義為一條從樹中任意節點出發,達到任意節點的序列。該路徑至少包含一個節點,且不一定經過根節點。

示例 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;
    }
};