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:經常練習,並儘量牢記數據結構。在節點上需要發生什麼以及數據需要去哪裏?例如:我是否需要在遞歸調用中傳遞信息,以及我需要從遞歸調用返回哪些信息? –