我正在嘗試撰寫一個函式來遍歷樹并將值存盤在字典中。我正在使用字典,因為我希望以 JSON 格式保存樹的結構。但是回傳只給了我樹的第一層。我已經使用插入函式插入了節點。這是我試圖理解樹中的遞回。
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
def __str__(self):
return str(self.data)
class BinarySearchTree:
def __init__(self):
self.root = None
# Return the BST object in dictionary format
def __str__(self):
return str(self.__dict__)
def traverse(self, current_node):
tree = {'root': current_node.data}
print(tree)
if current_node.left is not None:
tree.update({'left': current_node.left.data})
print(tree)
self.traverse(current_node.left)
if current_node.right is not None:
tree.update({'right': current_node.right.data})
print(tree)
self.traverse(current_node.right)
return tree
My Output:
__10_____
/ \
_5_ 20_________
/ \ / \
_3 7 15 ______73
/ \ / / /
1 4 6 12 25___
\ \
2 30_
/ \
27 35
{'root': 10}
{'root': 10, 'left': 5}
{'root': 5}
{'root': 5, 'left': 3}
{'root': 3}
{'root': 3, 'left': 1}
{'root': 1}
{'root': 1, 'right': 2}
{'root': 2}
{'root': 3, 'left': 1, 'right': 4}
{'root': 4}
{'root': 5, 'left': 3, 'right': 7}
{'root': 7}
{'root': 7, 'left': 6}
{'root': 6}
{'root': 10, 'left': 5, 'right': 20}
{'root': 20}
{'root': 20, 'left': 15}
{'root': 15}
{'root': 15, 'left': 12}
{'root': 12}
{'root': 20, 'left': 15, 'right': 73}
{'root': 73}
{'root': 73, 'left': 25}
{'root': 25}
{'root': 25, 'right': 30}
{'root': 30}
{'root': 30, 'left': 27}
{'root': 27}
{'root': 30, 'left': 27, 'right': 35}
{'root': 35}
{'root': 10, 'left': 5, 'right': 20}
行程以退出代碼 0 結束
uj5u.com熱心網友回復:
dict 中的leftandright鍵不應該將資料作為值,而是字典。因此,將遞回呼叫的結果分配給這些鍵。
我也會給最后一個引數一個默認值,所以主呼叫者不必指定它。
def traverse(self, current_node=None):
if not current_node:
current_node = self.root
tree = {'data': current_node.data}
if current_node.left:
tree.update({'left': self.traverse(current_node.left)})
if current_node.right:
tree.update({'right': self.traverse(current_node.right)})
return tree
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/497300.html
下一篇:改進R中的函式基準
