Java求二叉树的最大路径和
来源:互联网 发布:网络覆盖解决方案 编辑:程序博客网 时间:2024/06/06 03:45
所谓最大路径和,是指若二叉树每个节点的值都为整数,那么某条路径上的所有节点值的和若大于其余所有路径,那么该路径所有节点值的和为该二叉树的最大路径和。
如下图所示:
最大路径为2 - 5 - 3 - 4 - 7 -2 ,则最大路径和为23。
在寻求最大路径时需要注意的是对于二叉树
v
/ \
v1 v2
只有v,v+v1,v+v2这三个值的最大者才能返回给上一级。
代码实现如下:
public class MaxRoute {public static void main(String[] args){Node node1=new Node(3);node1.left=new Node(5);node1.right=new Node(4);node1.left.left=new Node(1);node1.left.right=new Node(2);node1.right.left=new Node(7);node1.right.right=new Node(8);node1.right.left.left=new Node(2);BinTree bt=new BinTree();int n=bt.maxPathSum(node1);System.out.println(n);}}class Node{int val;Node left;Node right;public Node(int x){this.val=x;}}class BinTree{public BinTree(){}//max为每次递归之后的最大路径和private int max;//travel函数递归执行子树并求子树的最大路径private int travel(Node node){int val=node.val;//lval,rval分别为左子树和右子树的最大路径值int lval=0,rval=0;//result是可以返回给上一级树的路径值int result=val;/* * 每次的travel函数中max是该级子树的最大路径值(该级子树最大路径值并不一定可以返回给上一级) * 只有val,val+lval,val+rval其中之一才可以返回给上一级 * 关键的是,max用来保存所有子树的最大路径值 *///逐级寻找应该返回到上一级的result和当前最大maxif(node.left!=null){lval=travel(node.left);if(lval>0){result=val+lval;}if(max<lval){max=lval;}}if(node.right!=null){rval=travel(node.right);if(result<val+rval){result=val+rval;}if(max<rval){max=rval;}}if(max<result){max=result;}if(max<val+lval+rval){max=val+lval+rval;}return result;}public int maxPathSum(Node root){max=Integer.MIN_VALUE;travel(root);return max;}}
运行结果:
23
1 0
- Java求二叉树的最大路径和
- 二叉树系列---求二叉树的最大路径和
- 求普通二叉树的最长路径、求普通二叉树的路径最大和
- 求二叉树中的最大路径和,也就是求节点和节点之间的路径上所有节点的最大值
- LeetCode之求二叉树最大路径和
- Binary Tree Maximum Path Sum 求二叉树的最大路径和
- 124 Binary Tree Maximum Path Sum 求二叉树的最大路径和
- 求树的最大路径和
- 二叉树最大路径和
- 二叉树最大路径和
- 二叉树最大路径和
- java 求二叉树中节点的最大距离.
- Java:求二叉树中节点的最大距离
- 求二叉树的深度和宽度平衡最大距离
- [各种面试题] 非二叉树的最大路径和
- 找一个二叉树的最大路径和
- 二叉树的最大路径和与最远结点距离
- 求二叉树最大路径和(Binary Tree Maximum Path Sum)
- Linux内核裁剪的具体步骤 http://blog.chinaunix.net/uid-10429687-id-3977273.html
- c的free和c++的delete的区别
- 如何完善链接
- PAT(甲级)1040
- C#学习笔记(五)
- Java求二叉树的最大路径和
- HDU 4554 叛逆的小明(西山居挑战赛)
- PAT(甲级)1041
- test7.21
- Struts2标签之bean
- 网上看了篇文章关于多表连接的,感觉很好,记录下来,以便日后自己学习
- HDU - 1069 Monkey and Banana(DAG)
- Android面试题
- PAT(甲级)1042