首页 > 试题广场 >

多叉树的直径

[编程题]多叉树的直径
  • 热度指数:10419 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一棵多叉树,求出这棵树的直径,即树上最远两点的距离。
包含n个结点,n-1条边的连通图称为树。
示例1的树如下图所示。其中4到5之间的路径最长,是树的直径,距离为5+2+4=11

数据范围:,保证最终结果满足
要求:空间复杂度:,时间复杂度
示例1

输入

6,[[0,1],[1,5],[1,2],[2,3],[2,4]],[3,4,2,1,5]

输出

11
示例2

输入

2,[[0,1],[1,2]],[1]

输出

1
# class Interval:
#     def __init__(self, a=0, b=0):
#         self.start = a
#         self.end = b

#
# 树的直径
# @param n int整型 树的节点个数
# @param Tree_edge Interval类一维数组 树的边
# @param Edge_value int整型一维数组 边的权值
# @return int整型
#
from collections import defaultdict        
class Solution:
    def solve(self , n , Tree_edge , Edge_value ):
        # write code here
        graph, table = {}, defaultdict()
        for i in range(len(Tree_edge)):
            graph.setdefault(Tree_edge[i].start, []).append(Tree_edge[i].end), graph.setdefault(Tree_edge[i].end, []).append(Tree_edge[i].start)
            table[(Tree_edge[i].start, Tree_edge[i].end)], table[(Tree_edge[i].end, Tree_edge[i].start)] = Edge_value[i], Edge_value[i]
        self.res, self.maxIndex =  0, -1
        def dfs(cnt, node, parent):
            cur = graph[node]
            for i in range(len(cur)):
                if cur[i] == parent:
                    continue
                dfs(cnt+table[(node,cur[i])], cur[i], node)
            if cnt > self.res:
                self.res = cnt
                self.maxIndex = node
        
        dfs(0, 0, -1)
        dfs(0, self.maxIndex, -1)
        return self.res
    

发表于 2021-06-16 16:06:02 回复(0)

问题信息

上传者:牛客332641号
难度:
1条回答 8077浏览

热门推荐

通过挑战的用户

查看代码