1245. Tree Diameter

1245. Tree Diameter

class Solution:
    def treeDiameter(self, edges: List[List[int]]) -> int:
        n=len(edges)+1
        graph=[[] for i in range(n)]
        for u,v in edges:
            graph[v].append(u)
            graph[u].append(v)
        
        diameter=0

        def dfs(node,parent):
            nonlocal diameter
            max_1,max_2=0,0
            for x in graph[node]:
                if x==parent:continue
                distance=dfs(x,node)+1
                if distance> max_1:
                    max_1,max_2=distance,max_1
                elif distance>max_2:
                    max_2=distance

            diameter=max(diameter,max_1+max_2)
            return max_1
        dfs(0,-1)
        return diameter

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用以下方法来实现输出所有二叉树直径及其路径长度的功能: ```java import java.util.ArrayList; import java.util.List; public class BinaryTree<T> { private Node<T> root; // 其他方法省略... public static <T> void diameterAll(BinaryTree<T> bitree) { if (bitree.root == null) { System.out.println("二叉树为空!"); return; } List<Node<T>> path = new ArrayList<>(); int[] diameter = new int[1]; diameterAllHelper(bitree.root, path, diameter); System.out.println("直径:"); for (int i = 0; i < path.size(); i++) { Node<T> node = path.get(i); System.out.print(node.data + " "); if (i < path.size() - 1) { System.out.print("-> "); } } System.out.println(); System.out.println("路径长度:" + diameter[0]); } private static <T> int diameterAllHelper(Node<T> node, List<Node<T>> path, int[] diameter) { if (node == null) { return 0; } int leftHeight = diameterAllHelper(node.left, path, diameter); int rightHeight = diameterAllHelper(node.right, path, diameter); int currentDiameter = leftHeight + rightHeight + 1; if (currentDiameter > diameter[0]) { diameter[0] = currentDiameter; path.clear(); addPath(node.left, path); path.add(node); addPath(node.right, path); } return Math.max(leftHeight, rightHeight) + 1; } private static <T> void addPath(Node<T> node, List<Node<T>> path) { if (node == null) { return; } addPath(node.left, path); path.add(node); addPath(node.right, path); } private static class Node<T> { private T data; private Node<T> left; private Node<T> right; public Node(T data) { this.data = data; } } } ``` 您可以将上述代码保存为`BinaryTree.java`文件,并在您的程序中使用`BinaryTree.diameterAll(bitree)`来输出所有二叉树直径及其路径长度。请注意,上述代码假设您已经实现了其他必要的二叉树操作方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值