1.二叉树的最大路径和
题目描述:
给定一个二叉树,请计算节点值之和最大的路径的节点值之和是多少。
这个路径的开始节点和结束节点可以是二叉树中的任意节点
代码:
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类
* @return int整型
*/
public int Max=Integer.MIN_VALUE;
public int maxPathSum (TreeNode root) {
// write code here
getMax(root);
return Max;
}
public int getMax(TreeNode root){
if(root==null){
return 0;
}
int left=0;
int right=0;
if(root.left!=null){
left=getMax(root.left);
}
if(root.right!=null){
right=getMax(root.right);
}
int sum=root.val;
if(left>0){
sum+=left;
}
if(right>0){
sum+=right;
}
Max=Math.max(Max,sum);
return Math.max(root.val,Math.max(root.val+left,root.val+right));
}
}
2.树的直径
题目描述:
给定一棵树,求出这棵树的直径,即树上最远两点的距离。
包含n个结点,n-1条边的连通图称为树。
示例1的树如下图所示。其中4到5之间的路径最长,是树的直径,距离为5+2+4=11
代码: