如何列出二叉树中最长的路径?

时间:2016-03-16 14:40:18

标签: python python-3.x recursion tree binary-tree

这里我们试图列出二叉树中最长的路径。例如,

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()

2 个答案:

答案 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编码的想法:

Optimize finding diameter of binary tree in Python

答案 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

在您的代码中,无需检查是否存在左或右孩子 你的函数在任何情况下都会返回列表。你需要做的是 检查孩子们返回的列表的长度 那个更长了。