求二叉树最长路径长度和

1.题目:

求任意一颗二叉树最长路径长度

样例:如下所示

求二叉树最长路径长度和_第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.结果

求二叉树最长路径长度和_第2张图片

图一树最长路径

求二叉树最长路径长度和_第3张图片

图二最长路径结果

你可能感兴趣的:(java,数据结构)