您的位置:首页 > 其它

LeetCode(124) Binary Tree Maximum Path Sum 二叉树的最大路径和 (如何递归?)

2016-11-01 21:40 567 查看
转载 :http://blog.csdn.net/fly_yr/article/details/50412751

对任意一个节点,当前节点值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)如果二叉树不为空,最大距离要么是左子树中的最大距离,要么是右子树中的最大距离,要么是左子树节点中到根节点的最大距离+右子树节点中到根节点的最大距离

思路同上,代码也同上,只不过要换成距离(也就是深度)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: