1
我试图在Python中实现Tree
,我发现this线程,并尝试工作我自己的树,但我被困在如何添加大孩子。如何将孙子添加到python树?
我试图构建树是这样的:
Root
ch1
ch2
ch3
ch4
所以我想通了add_child()
方法应该是递归的:
1,如果树一直没有孩子,加上孩子的根
2,对于Root的每个孩子,如果其中一个孩子等于parent
,则向其添加孩子并停止循环(因此新孩子实际上是一个大孩子)。
3,如果没有匹配,请拨打add_child()
对当前的孩子。
但我的代码给我:
Root
ch1
ch2
ch3
ch4
顺便说一句,每次我用递归算法我感到困惑的工作,任何人都可以给我如何编写代码递归一些好的建议?还是有什么好的教程?
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
它的工作原理!谢谢,btw可以给我一些关于编写/调试递归程序的建议吗?任何事情都会有所帮助,我对此感到非常沮丧...... – shengy
@shengy:经常练习,并尽量牢记数据结构。在节点上需要发生什么以及数据需要去哪里?例如:我是否需要在递归调用中传递信息,以及我需要从递归调用返回哪些信息? –