1. 程式人生 > >LintCode-二叉樹中的最大路徑和

LintCode-二叉樹中的最大路徑和

給出一棵二叉樹,尋找一條路徑使其路徑和最大,路徑可以在任一節點中開始和結束(路徑和為兩個節點之間所在路徑上的節點權值之和)

樣例

給出一棵二叉樹:

  1
      / \
     2   3

返回 6

分析:每條最長路徑都肯定會以某個頂點為跟,然後兩邊是以那個節點為跟到葉子節點的最長路徑。

程式碼:

/**
 * Definition of TreeNode:
 * class TreeNode {
 * public:
 *     int val;
 *     TreeNode *left, *right;
 *     TreeNode(int val) {
 *         this->val = val;
 *         this->left = this->right = NULL;
 *     }
 * }
 */
class Solution {
public:
    /**
     * @param root: The root of binary tree.
     * @return: An integer
     */
    int maxPathSum(TreeNode *root) {
        // write your code here
        int ret = INT_MIN;
        onePath(root,ret);
        return ret;
    }
    int onePath(TreeNode* root,int&ret)
    {
        if(root==nullptr)
            return 0;
        int l = onePath(root->left,ret);
        int r = onePath(root->right,ret);
        ret = max(ret,max(0,l)+max(0,r)+root->val);
        return max(0,max(l,r))+root->val;
    }
};