leetcodebinary-tree-maximum-path-sum
Posted 巴山雨夜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcodebinary-tree-maximum-path-sum相关的知识,希望对你有一定的参考价值。
题目 :
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
Return6.
题目解答:
给定一个二叉树,找到最大路径和。路径可以在树的任何节点上开始和结束。
例如:
给定下面的二叉树,
1
/ \\
2 3
Return6。
内部问题罗列:
最后的大问题答案,可能的路径出处有 :
1、root +left路径;
2、root +right路径;
3、root + right路径 +left 路径;
4、root单个的结点;
写代码过程中可能遇到的问题遇到的问题:
1、结点的值可能是负数;所以最大路径的初始值需要设定为最小值;
2、在子树节点上返回的最大的路径和不能出现第三种情况(解决方法:我们需要保存这哥知道最大的路径max之中);
代码实现:
/**
* Definition for binary tree
* struct TreeNode
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL)
* ;
*/
#include<limits.h>
class Solution
public:
int _maxPathSum(TreeNode *root,int &max)
//要是当前的结点是空
if(root == NULL)
return 0;
//得到当前结点的左右子树的最大的路径和
int left = _maxPathSum(root->left,max) ;
int right = _maxPathSum(root->right,max) ;
int data = root->val;
int sum = left+right+data;
//更新max的值
max = max < (left+data)?(left+data):max;
max = max < (right+data)?(right+data):max;
max = max < data?data:max;
max = max < sum?sum:max;
//得到返回值
int ret = data;
ret = ret < left+data?left+data:ret;
ret = ret < right +data?right+data:ret;
return ret;
int maxPathSum(TreeNode *root)
if(root == NULL)
return 0;
//设置max值为最小的int值
int max = 0x80000000;
_maxPathSum(root,max);
return max;
;
以上是关于leetcodebinary-tree-maximum-path-sum的主要内容,如果未能解决你的问题,请参考以下文章