1. 程式人生 > 其它 >牛客網_求二叉樹的最大路徑和

牛客網_求二叉樹的最大路徑和

技術標籤:深度優先搜尋

題目描述

給定一個二叉樹,請計算節點值之和最大的路徑的節點值之和是多少。
這個路徑的開始節點和結束節點可以是二叉樹中的任意節點
例如:
給出以下的二叉樹,

返回的結果為6

輸入

{-2,1}

返回值

1

輸入

{-2,#,-3}

返回值

-2
/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */
class Solution {
public:
    int res = INT_MIN;//INT_MIN是一個絕對值很大的負數
    int maxPathSum(TreeNode* root) {
        // write code here
        helper(root);
        return res;
    }
    //返回本結點到其他所有節點的最長距離
    int helper(TreeNode* root){
        if(root==NULL)
            return 0;
        int left = max(helper(root->left),0);//左孩子到其所有子節點的最長距離
        int right = max(helper(root->right),0);//右孩子到其所有子節點的最長距離
        int temp=root->val+left+right;
        if(res<temp)res=temp;
        return root->val+max(left,right);
    }
};