二叉树中找一条和最大的路径
题目描述
给你一个二叉树,求出一条和最大的路径,路径的起点和终点可以是任意的树节点。(注意:树节点的值都是正数),比如下面的树中和最大的一条路径是【5、2、1、3】
思路
每条最长路径都肯定会以某个节点为根,然后两边是以那个节点为根到叶子节点的最长路径。
package lianjia;
public class TreeMaxPath {
public static int max = Integer.MIN_VALUE; // 始终保持最大的和
// root到叶节点的最大路径的和
public static int solution(TreeNode root) {
if(root == null) {
return 0;
}
int left = solution(root.left);
int right = solution(root.right);
max = Math.max(max, left + right + root.val);// 更新max值
return Math.max(left, right) + root.val;
}
public static void main(String[] args) {
// Test case
TreeNode node1 = new TreeNode(1);
TreeNode node2 = new TreeNode(2);
TreeNode node3 = new TreeNode(3);
TreeNode node4 = new TreeNode(4);
TreeNode node5 = new TreeNode(5);
node1.left = node2;
node1.right = node3;
node2.left = node4;
node2.right = node5;
solution(node1);
System.out.println("max = " + max);
}
}
参考:http://blog.csdn.net/wangyuquanliuli/article/details/45897297