在Python中查找n叉树的直径的程序
假设我们已经有了一个n叉树,并且需要确定树的直径。树的直径是树上任意两个叶子结点之间的最长路径。我们需要找出并返回表示树直径的整数值。
因此,如果输入如下:
则输出将为3。
这个n叉树的直径由边27->14、14->42和42->56或42->65(在图表中用红色线标记)组成。路径长度为3。
为了解决这个问题,我们需要执行以下步骤:
- ans := 1
- 定义一个函数 depth()。这个函数需要传递根结点
- 如果根结点为空,则返回0
- children := 包含值0, 0的新列表
- temp_children := 新列表
- 对于根节点的每个子节点,执行以下循环:
- 将 depth(child) 插入到 temp_children 列表的末尾
- 如果 temp_children 的大小 > 0,则
- children := temp_children
- ans := max(ans, sum(sort the list children [from index length of(children)-2 to end]) + 1)
- 返回 children + 1 的最大值
- depth(root)
- 返回(ans – 1)
更多Python相关文章,请阅读:Python 教程
例子(Python)
让我们看一下以下实现,以更好地理解。
class Node:
def __init__(self, value, child=None) -> None:
self.val = value
self.children = []
if child != None:
for value in child:
self.children.append(value)
ans = 1
def solve(root):
def depth(root):
global ans
if not root:
return 0
children = [0, 0]
temp_children = [depth(child) for child in root.children]
if len(temp_children) > 0:
children = temp_children
ans = max(ans, sum(sorted(children)[-2:]) + 1)
return max(children) + 1
depth(root)
return ans - 1
node6 = Node(65)
node5 = Node(56)
node4 = Node(42, [node5, node6])
node3 = Node(32)
node2 = Node(27)
node1 = Node(14, [node2, node3, node4])
root = node1
print(solve(root))
输入
node6 = Node(65)
node5 = Node(56)
node4 = Node(42, [node5, node6])
node3 = Node(32)
node2 = Node(27)
node1 = Node(14, [node2, node3, node4])
root = node1
输出
3