gpt4 book ai didi

python - 遍历非二叉树

转载 作者:行者123 更新时间:2023-11-28 22:58:36 30 4
gpt4 key购买 nike

我已经为节点创建了自定义类

class NodeTree(object):
def __init__(self, name = None, children = None):
self.name = name
self.children = children

并定义了一个函数来生成一棵树(一个包含其子节点的节点)

def create_tree(d):
x = NodeTree()
for a in d.keys():
if type(d[a]) == str:
x.name = d[a]
if type(d[a]) == list:
if d[a] != []:
for b in d[a]:
x.add_child(create_tree(b))
return x

输入是一个字典,其中有一个节点名称参数和一个列表,其子项与父项的形式相同。该函数工作正常,我已经制作了证明它的方法,但我找不到正确遍历它并获得树的高度的方法。我不知道“高度”是否是正确的术语,因为我知道它可能是矛盾的,我需要将节点计为度量单位,如下所示:

                                      parent
|
|
---------
| |
child child

这棵树的高度是 2,我已经尝试了一切,从计数器到类中的标签,一切似乎都退化了,我从来没有得到正确的高度。我应该如何处理?

最佳答案

为您的树创建一个递归的 height 方法来确定节点的高度(即,从该节点到叶子的路径中的最大节点数):

def height(self):
if not self.children: # base case
return 1
else: # recursive case
return 1 + max(child.height() for child in self.children)

其他的树遍历也可以递归完成。例如,这里有一个生成器方法,它以“预序”方式生成树节点的名称(也就是说,每个父节点在其子节点和后代节点之前):

def preorder(self):
yield self.name
for child in self.children:
yield from child.preorder() # Python 3.3 only!

该循环中的 yield from 语法是 Python 3.3 中的新语法。您可以通过以下方式在早期版本中获得相同的结果:

        for descendent in child.preorder():
yield descendent

关于python - 遍历非二叉树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13730404/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com