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

  1. 題目:
    給定一個非空二叉樹,返回其最大路徑和。
    本題中,路徑被定義爲一條從樹中任意節點出發,達到任意節點的序列。該路徑至少包含一個節點,且不一定經過根節點。
  2. 示例:
    在這裏插入圖片描述
    在這裏插入圖片描述
  3. 思路:
    post-order-traversal(後序遍歷)變形題,left最大路徑和right最大路徑後更新最終結果的狀態。
    採用遞歸,每遍歷一個節點,判斷左子樹和右子樹的值,如果子樹的值大於0,則加上子樹的值,同時利用全局變量maxv記錄遞歸過程中的最大值。
最小值:INT_MIN        1<<31
最大值:INT_MAX      (1<<31)-1
  1. 代碼:
class Solution {
public:
    int maxv=INT_MIN;    //全局變量,保存最大和
    int maxPathSum(TreeNode* root) {
        if(root==NULL)
            return 0;
        calculate(root);  //遞歸計算
        return maxv;
    }
    int calculate(TreeNode* root){   //核心代碼
        if(root==NULL) return 0;
        int temp=root->val;
        //後序遍歷
        int lsum=calculate(root->left);
        int rsum=calculate(root->right);
        if(lsum>0) temp+=lsum;
        if(rsum>0) temp+=rsum;
        if(temp>maxv) maxv=temp;  //更新最大和
        return max(root->val,max(root->val+lsum,root->val+rsum));
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章