124:Binary Tree Maximum Path Sum【樹】【DFS】

題目鏈接:click~

/*題意:給定一顆二叉樹,求最大路徑和。路徑可以從任意結點開始,任意結點結束*/

/**
 *思路: 對於每個結點,需要比較三個值
 *       1)左子結點爲結尾的路徑和+當前結點值
 *       2)右子結點爲結尾的路徑和+當前結點值
 *       3)當前結點值
 *
 *       計算以當前結點爲根時最大路徑和:
 *       1)左子結點爲結尾的路徑和+當前結點值
 *       2)右子結點爲結尾的路徑和+當前結點值
 *       3)當前結點值
 *       4)左子結點爲結尾的路徑和+當前結點值+右子結點爲結尾的路徑和
 */


class Solution {
public:
    int getMaxSum(TreeNode *root, int& maxSum) {
        if(root == NULL) return 0;
        int leftSum = getMaxSum(root->left, maxSum);  //左子結點爲結尾的路徑和
        int rightSum = getMaxSum(root->right, maxSum);//右子結點爲結尾的路徑和
        //分別對應1)、2)、3)、
        int curSum = max(max(root->val+leftSum, root->val+rightSum), root->val);

        //計算最大值
        maxSum = max(maxSum, max(curSum, root->val+leftSum+rightSum));

        return curSum;
    }
    int maxPathSum(TreeNode *root) {
        if(root == NULL) return 0;
        int maxSum = -0xfffffff;
        getMaxSum(root, maxSum);
        return maxSum;
    }
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章