1. 程式人生 > >給定一個二叉樹,找到最大路徑和。該路徑可以在樹中的任何節點處開始和結束。

給定一個二叉樹,找到最大路徑和。該路徑可以在樹中的任何節點處開始和結束。

類是在一維陣列中找到最大的子序列和。這裡是根據左右子樹

int maxPath;
    int maxPathSum(TreeNode *root) {
        maxPath=INT_MIN;
        if(root==NULL)
            return 0;
        PreOrder(root);
        return maxPath;
    }
    int PreOrder(TreeNode* root){
        if(root==NULL)
            return 0;
        //如果左右 子樹 小於0  就不用加
       int left=max(0,PreOrder(root->left));
        int right=max(0,PreOrder(root->right));
        //更新最大路徑
       maxPath=max(maxPath,left+right+root->val);
        
        return max(left,right)+root->val;
    }