牛客網_求二叉樹的最大路徑和
阿新 • • 發佈:2021-02-06
技術標籤:深度優先搜尋
題目描述
給定一個二叉樹,請計算節點值之和最大的路徑的節點值之和是多少。
這個路徑的開始節點和結束節點可以是二叉樹中的任意節點
例如:
給出以下的二叉樹,
返回的結果為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); } };