作為初學者,我一直在嘗試在 python 中實現(xiàn)二叉樹。并且已經(jīng)可以成功實現(xiàn)很多,只有一個問題是我無法返回traverse()二叉樹中所有元素 ( ) 的列表。我在這里使用兩個類,Node并且BinaryTree.節(jié)點類class Node: def __init__(self, val): self.value = val self.left = None self.right = NoneTraverse 方法返回二叉樹中的所有元素。 def traverse(self): #<-- Problem here tree_elements = [] if self.left != None: self.left.traverse() tree_elements.append(self.value) #debug print(self.value, end=" ") if self.right != None: self.right.traverse() return tree_elements def addNode(self, node): if node.value < self.value and node.value != self.value: if self.left == None: self.left = node else: self.left.addNode(node) elif node.value > self.value and node.value != self.value: if self.right == None: self.right = node else: self.right.addNode(node) def search(self, val): if val == self.value: return "Found" elif val < self.value: if self.left != None: return self.left.search(val) else: return "Not Found " elif val > self.value: if self.right != None: return self.right.search(val) else: return "Not Found"二叉樹class BinaryTree: def __init__(self): self.root = None def addVlaue(self, val): node = Node(val) if self.root == None: self.root = node else: self.root.addNode(node) def search(self, val): if self.root == None: return False else: return self.root.search(val) def traverse(self): if self.root == None: return "no data" else: return self.root.traverse()問題:traverse方法必須返回二叉樹中的所有元素,但我只得到樹的第一個值。例子:元素:100 18 46 5 65 5 31 71 94 43 #在樹中輸入樹的輸出:5 18 31 43 46 65 71 94 100 #預期輸出[100] #樹的輸出
1 回答

慕哥9229398
TA貢獻1877條經(jīng)驗 獲得超6個贊
該tree_elements列表需要沿著遞歸調(diào)用進行,沿途收集每個節(jié)點。換句話說,它必須作為參數(shù)傳遞給traverse調(diào)用(調(diào)用traverse根節(jié)點時除外)。
否則,在每次遍歷調(diào)用中都會創(chuàng)建并丟棄一個新列表(因為在其遞歸期間您從未對其返回值做任何事情traverse),除了僅返回根元素的頂級遞歸調(diào)用。
試試這個實現(xiàn):
def traverse(self, tree_elements=None):
if tree_elements is None:
tree_elements = []
if self.left != None:
self.left.traverse(tree_elements=tree_elements)
tree_elements.append(self.value)
if self.right != None:
self.right.traverse(tree_elements=tree_elements)
return tree_elements
添加回答
舉報
0/150
提交
取消