LeetCode124 Binary Tree Maximum Path Sum 二叉树最大路径和

Given a non-empty binary tree, find the maximum path sum.

For this problem, a path is defined as any sequence of nodes from some starting node to any node in the tree along the parent-child connections. The path must contain at least one node and does not need to go through the root.

Example 1:

Input: [1,2,3]

       1
      / \
     2   3

Output: 6

Example 2:

Input: [-10,9,20,null,null,15,7]

   -10
   / \
  9  20
    /  \
   15   7

Output: 42

题源:here;完整实现:here

思路:

解这道题的关键在于设计递归规则。考虑最简单的二叉树:

        root
      /      \
     left   right

在这种情况下,我们可以给出这个二叉树的所有组合可能:

1 root

2 roo+left

3 root+right

4 root+left+right

至于只有left和right的情况,我们将其归于left和right的递归中的root。为了找到整颗树的最大组合可能,我们设计递归的时候将left和right作为递归分支,这样在left和right有子树的时候就可以遍历整颗树了。

int maxPathSum(TreeNode *root, int &maxSum){
	int maxLeft = 0, maxRight = 0;
	if (root->left) maxLeft = maxPathSum(root->left, maxSum);
	if (root->right) maxRight = maxPathSum(root->right, maxSum);
	int maxBranch = maxLeft > maxRight ? max(maxLeft + root->val, root->val) : max(maxRight + root->val, root->val);
	maxSum = max(maxSum, maxBranch);
	maxSum = max(maxSum, maxLeft + maxRight + root->val);
	return maxBranch;
}

int maxPathSum(TreeNode* root) {
	int maxSum = INT_MIN;
	maxPathSum(root, maxSum);
	return maxSum;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值