1.题目:
求任意一颗二叉树最长路径长度
样例:如下所示
图一树的最长路径长度为4,图二的最长路径长度为7,图一最长路径经过根节点,顶点为1,图二不经过,顶点为3
2.思路
树中任意两个节点之间,连接起来的路径最长。方法就是求出每个节点的左子树和右子树的高度,两者相加就是当前节点的最长路径,然后比较每个节点的最长路径,最大的就是结果
3.实现方法
定义一个静态变量MaxLength记录每一步最大长度,采取前序遍历来遍历每一个节点,在遍历过程中,对当前节点的最长路径进行比较,对于每一个节点最长路径求法,先求出它左子树和右子树的高度(节点数最多的路径),然后相加即为当前节点最长路径
代码如下:
static Integer MaxLength=0;//记录最长路径
//遍历整棵树,得到最长路径
public void getLength(TreeNode t){
if(t!=null){
MaxLength=Math.max(LengthTree(t),MaxLength);
getLength(t.lchild);
getLength(t.rchild);
}
}
//得到当前节点的最长路径
public int LengthTree(TreeNode t){
if (t==null)
return 0;
int left=heighTree(t.lchild);
int right=heighTree(t.rchild);
int CurMax=left+right;
return CurMax;
}
//求二叉树最大高度
public int heighTree(TreeNode t){
if (t==null)
return 0;
else
return Math.max(heighTree(t.lchild),heighTree(t.rchild))+1;
}
4.结果
图一树最长路径
图二最长路径结果