LeetCode(Binary Tree Maximum Path Sum) 在二叉樹中找出一條和最大的路徑
阿新 • • 發佈:2019-01-08
題目要求:
Given a binary tree, find the maximum path sum.
The path may start and end at any node in the tree.
For example:
Given the below binary tree,
1 / \ 2 3
Return 6
.
程式碼:
class Solution { public: int maxPathSum(TreeNode *root) { if(root == NULL) return 0; int sum = numeric_limits<int>::min(); DFS(root, sum); return sum; } int DFS(TreeNode* root, int &max_sum)//返回以root為根節點的最大和,要麼是root本身最大,或者是 root + root 左子樹的最大和,或者root+root右子樹中最大和 { if(root == NULL) return 0; int left = DFS(root->left, max_sum); int right = DFS(root->right, max_sum); int tmp_sum = root->val;//計算出以當前節點為根節點時的路徑最大的和 if(left > 0)//如果左子樹最大和大於零,加上左子樹會使和更大 tmp_sum += left; if(right > 0) tmp_sum += right; max_sum = max(tmp_sum, max_sum); return max(root->val, max(root->val + left, root->val + right)); } };