我正在尝试在python中实现Tree
,我发现this线程并试图使用我自己的树,但我不知道如何添加大孩子。
我想要构建的树就像:
Root
ch1
ch2
ch3
ch4
所以我认为add_child()
方法应该是递归的:
1,如果树没有子节点,请将子节点添加到Root
2,对于Root的每个孩子,如果其中一个孩子等于parent
,则将孩子添加到其中并停止循环(因此新孩子实际上是一个大孩子)。
3,如果没有匹配,请在当前孩子身上调用add_child()
。
但是我的代码给了我:
Root
ch1
ch2
ch3
ch4
Btw,每次我使用递归算法我感到困惑,有人能给我一些关于如何编写递归代码的好建议吗?还是有任何好的教程?
class Node(object):
def __init__(self, data, parent=None):
self.data = data
self.children = []
self.parent = parent
def __repr__(self, level=0):
ret = "\t" * level + repr(self.data) + "\n"
for child in self.children:
ret += child.__repr__(level + 1)
return ret
def add_child(self, node, parent):
if self.children == []:
self.children.append(node)
return
for child in self.children:
if child == parent:
child.children.append(node)
return
else:
child.add_child(node, parent)
# self.children.append(node)
if __name__ == '__main__':
tree = Node('Root')
tree.add_child(Node('ch1'), 'Root')
tree.add_child(Node('ch2'), 'ch1')
tree.add_child(Node('ch3'), 'ch2')
tree.add_child(Node('ch4'), 'ch2')
print tree
答案 0 :(得分:1)
以下部分没有意义:
if self.children == []:
self.children.append(node)
return
如果节点没有子节点,您会自动将节点添加到该节点吗?如果应将节点添加到其他父节点怎么办?
你可能想写:
def add_child(self, node, parent):
if self.data == parent:
self.children.append(node)
return
for child in self.children:
child.add_child(node, parent)
按预期生成树。