求二叉树最长路径长度和

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.结果

图一树最长路径

图二最长路径结果

以下是使用 Java 实现二叉树最长路径的元素集合的示例代码: ```java import java.util.ArrayList; import java.util.List; class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int val) { this.val = val; this.left = null; this.right = null; } } public class BinaryTreeLongestPath { public static void main(String[] args) { // 创建一棵二叉树 TreeNode root = new TreeNode(1); root.left = new TreeNode(2); root.right = new TreeNode(3); root.left.left = new TreeNode(4); root.left.right = new TreeNode(5); // 最长路径的元素集合 List<Integer> longestPath = findLongestPath(root); // 打印最长路径的元素集合 System.out.println("最长路径的元素集合: " + longestPath); } public static List<Integer> findLongestPath(TreeNode root) { List<Integer> longestPath = new ArrayList<>(); if (root != null) { List<Integer> leftPath = findLongestPath(root.left); List<Integer> rightPath = findLongestPath(root.right); // 比较左右子树的路径长度,取较长的路径 if (leftPath.size() > rightPath.size()) { longestPath.addAll(leftPath); } else { longestPath.addAll(rightPath); } // 将根节点添加到最长路径中 longestPath.add(root.val); } return longestPath; } } ``` 这段代码使用递归的方式二叉树最长路径。我们首先创建一个 `TreeNode` 类来表示二叉树节点,然后在 `BinaryTreeLongestPath` 类中实现 `findLongestPath()` 方法来递归地寻找最长路径。最后,在 `main()` 方法中创建一棵二叉树,并打印最长路径的元素集合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值