LeetCode(124) Binary Tree Maximum Path Sum 二叉樹的最大路徑和 (如何遞迴?)
阿新 • • 發佈:2019-01-29
對任意一個節點,當前節點值cur,
左子樹,一條路徑值 > 0 , cur += left
右子樹,一條路徑值 > 0 , cur += right
這樣可以可以遍歷求得最大的路徑和。
ac程式碼
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int INF = 0x7fffffff;
int MIN_INF = -INF-1;
int maxVal;
int dfs(TreeNode* root)
{
if(root == NULL)
return 0;
else{
int leftM = dfs(root->left);
int rightM = dfs(root->right);
int rootVal = root->val;
int cur = rootVal;
if(leftM > 0)
cur += leftM;
if(rightM > 0)
cur += rightM;
if(cur > maxVal)
maxVal = cur;
return max(rootVal, max(rootVal+leftM, rootVal+rightM));
}
}
int maxPathSum(TreeNode* root) {
if (root == NULL)
return 0;
maxVal = MIN_INF;
dfs(root);
return maxVal;
}
};
注意遞迴思路
求二叉樹中兩個節點之間的最大距離。
(1)如果二叉樹為空,返回0
(2)如果二叉樹不為空,最大距離要麼是左子樹中的最大距離,要麼是右子樹中的最大距離,要麼是左子樹節點中到根節點的最大距離+右子樹節點中到根節點的最大距離
思路同上,程式碼也同上,只不過要換成距離(也就是深度)