LintCode-分治-二叉树中的最大路径和
来源:互联网 发布:中国出口数据查询 编辑:程序博客网 时间:2024/05/19 23:11
点此进入题目
解题思路:该题目是求二叉树的最大路径和,即二叉树中链接在同一条路径上的节点值相加的最大值。那么这个路径有可能只在左子树中,有可能从左子树经过节点到右子树,也有可能在右子树中。所以需要判断。
解题过程:首先新建一个函数,求除节点外,左右子树节点那条路径和最大(该路径是从节点开始只包含在左子树或者右子树中的路径)。先求经过根节点的最大路径和,首先定义一个整形max=0和count=0,若左子树不空,那么count赋值为左子树的最大路径和,然后count>0时,max+=count。右子树类似。然后得到了经过根节点的最大路径和max。然后利用递归求左子树的最大路径和m1,和右子树的最大路径和m2,然后比较max,m1,m2的最大值。返回。
代码实现:
int BiggerChild(TreeNode * root)
{
if(root==NULL) return 0;
else{
int max=-1000000000,m1=0,m2=0;
if(root->left!=NULL) m1=root->left->val;
if(root->right!=NULL) m2=root->right->val;
m1+=BiggerChild(root->left);
max=m1;
m2+=BiggerChild(root->right);
if(max<m2) max=m2;
return max;
}
}
int maxPathSum(TreeNode * root)
{
if(root==NULL) return 0;
else{
int max=root->val,m1=-10000000,m2=-100000000,count;
if(root->left!=NULL)
{
count=root->left->val+BiggerChild(root->left);
if(count>0) max+=count;
m1=maxPathSum(root->left);
}
if(root->right!=NULL)
{
count=root->right->val+BiggerChild(root->right);
if(count>0) max+=count;
m2=maxPathSum(root->right);
}
if(max<m1) max=m1;
if(max<m2) max=m2;
return max;
}
}
个人总结:我自己又令定义了一个新的函数,也会有别的办法,也有更简单的办法。
注意事项:需要注意的就是要理清思路,其余也没有多大的问题。
- LintCode-分治-二叉树中的最大路径和
- LintCode-二叉树中的最大路径和
- lintcode,二叉树中的最大路径和
- 二叉树中的最大路径和-LintCode
- LintCode 二叉树中的最大路径和
- lintcode--二叉树中的最大路径和
- 二叉树中的最大路径和-LintCode
- lintcode-二叉树中的最大路径和-94
- lintcode(94)二叉树中的最大路径和
- [LintCode] Binary Tree Maximum Path Sum (二叉树中的最大路径和)
- lintcode binary-tree-maximum-path-sum 二叉树中的最大路径和
- 二叉树中的最大路径和
- 二叉树中的最大路径和
- 题目:二叉树中的最大路径和
- 二叉树中的最大路径和
- 二叉树中的最大路径和
- 二叉树中的最大路径和
- 二叉树中的最大路径和
- 吴恩达最新满满干货告诉你,怎样才能成为真正的AI公司(附视频)
- 100+经典Java面试题及答案解析
- tmux配置
- 关于一个STM32编译报错问题,变量声明不能在语句后面
- udp client 第二次操作时报错 write: connection refused
- LintCode-分治-二叉树中的最大路径和
- 新建对象时 属性发生的变化
- C语言转换大小写
- 7、Zookeeper场景案例分析
- Http的无状态性
- 三次握手与四次挥手
- linux系统存入mysql的中文数据乱码???? linux版MySQL设置utf-8及其问题大坑
- Consul centos 安装
- AngularJS控制器之间的数据共享及通信详解