这里我们试图列出二叉树中最长的路径。例如,
sqrt_rd
list_longest_path(None)
[]
list_longest_path(BinaryTree(5))
[5]
b1 = BinaryTree(7)
b2 = BinaryTree(3, BinaryTree(2), None)
b3 = BinaryTree(5, b2, b1)
list_longest_path(b3)
我的代码在底部。显然,代码返回树中的每个节点。在这里,我在如何同时使用[5, 3, 2]
时生成所有列表时遇到了困难?
max()
答案 0 :(得分:0)
树中最长的路径称为" 直径"。所以你正在寻找像"蟒蛇树直径计算器" 这样的东西。
您可以在此处查看算法的实现:
http://www.geeksforgeeks.org/diameter-of-a-binary-tree/
在这里:
http://tech-queries.blogspot.com.br/2010/09/diameter-of-tree-in-on.html
由于这个网站只包含C和JAVA中的代码,你可以看看这里得到一些pythonic编码的想法:
答案 1 :(得分:0)
这是一个将返回路径的Python函数:
def list_longest_path(root):
if not root:
return []
l = list_longest_path(root.left)
r = list_longest_path(root.right)
if len(l) > len(r):
return [root] + l
else:
return [root] + r
在您的代码中,无需检查是否存在左或右孩子 你的函数在任何情况下都会返回列表。你需要做的是 检查孩子们返回的列表的长度 那个更长了。