1. 程式人生 > 資訊 >歐菲光:公司南昌所有園區生產經營情況正常,未出現員工感染新冠病毒情況

歐菲光:公司南昌所有園區生產經營情況正常,未出現員工感染新冠病毒情況

124. 二叉樹中的最大路徑和

路徑 被定義為一條從樹中任意節點出發,沿父節點-子節點連線,達到任意節點的序列。同一個節點在一條路徑序列中 至多出現一次 。該路徑 至少包含一個 節點,且不一定經過根節點。

路徑和 是路徑中各節點值的總和。

給你一個二叉樹的根節點 root ,返回其 最大路徑和

示例 1:

輸入:root = [1,2,3]
輸出:6
解釋:最優路徑是 2 -> 1 -> 3 ,路徑和為 2 + 1 + 3 = 6

示例 2:

輸入:root = [-10,9,20,null,null,15,7]
輸出:42
解釋:最優路徑是 15 -> 20 -> 7 ,路徑和為 15 + 20 + 7 = 42

提示:

  • 樹中節點數目範圍是 [1, 3 * 104]
  • -1000 <= Node.val <= 1000

//深度優先搜尋,後序遍歷的時候順帶計算單邊最大路徑和即可

class Solution {
public:
    int res=INT_MIN;
    int maxPathSum(TreeNode* root) {
        if(root==nullptr)return 0;
        traverse(root);
        return res;
    }
    //本題遍歷要去計算單邊最大路徑和
    int traverse(TreeNode* root)
    {
        if(root==nullptr)return 0;
        //單邊最大路徑 如果是負數的話就不用選就是0
        int leftMax=max(0,traverse(root->left));
        int rightMax=max(0,traverse(root->right));
        //後序遍歷 順帶計算單邊最大路徑和
        int sum=root->val+leftMax+rightMax;
        res=max(res,sum);
        //從根節點root為起點的最大單邊路徑和
        return root->val+max(leftMax,rightMax);
    }
};