Python - 获取Tree中所有孩子的身高

时间:2015-03-26 22:32:05

标签: python recursion tree

我无法直观地看到递归获取普通树(非BST)中所有子节点的高度的方法。

对于BST来说,由于只有两个节点,因此相当明显。考虑到每个节点可能有多个子节点,你会怎么做呢?

如何获取普通树中所有子节点高度的列表?

因为我有不到10个代表,所以我不能画一张照片,但是说我有一个有多个孩子的树。这些孩子中的每一个最终都会导致不同的叶节点。我想要从根节点到叶节点的每个路径的高度列表。你会怎么做呢?

我知道:

def height(t):
    if not t.children:
        return 1
    else:
        return max(height(c) for c in t.children) + 1

显然会返回max高度,但我无法想办法以递归方式为树的末尾的每条路径执行此操作。我不想要最大高度,我想要所有的高度。

1 个答案:

答案 0 :(得分:1)

这很容易,你应该传递另一个参数,由1 +定义的级别和节点与根之间的连接数

当你到达一个叶子时,你将级别值添加到一个全局列表中,此时级别值将是根到叶子之间路径的长度

在运行结束时,全局列表将包含所有高度

heights = []

def height(t, level=0):
    if not t.children:
        heights.append(level)
    else:
        for c in t.children:
            height(c, level+1)