我正在用 python 通過二叉樹學習遞回。
我不明白這兩個函式輸出的差異。在第一個中,我正在撰寫遍歷以回傳一個串列,在第二個中一個字串。
對于串列:
class Node:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
class Tree:
def __init__(self):
self.root = None
def inorder(self, data, traversal=[]):
if data:
self.inorder(data.left, traversal)
traversal.append(str(data.value))
self.inorder(data.right, traversal)
return traversal
"""
1
/ \
2 3
/ \
4 5
"""
thing = Tree()
thing.root = Node(1)
thing.root.left = Node(2)
thing.root.right = Node(3)
thing.root.left.left = Node(4)
thing.root.left.right = Node(5)
print(thing.inorder(thing.root))
['4', '2', '5', '1', '3']
但是,如果我修改 inorder 函式以回傳一個字串:
def inorder(self, data, traversal=""):
if data:
self.inorder(data.left, traversal)
traversal = str(data.value)
self.inorder(data.right, traversal)
return traversal
'1'
僅當我將遞回呼叫的輸出分配給遍歷時才有效,如下所示:
def inorder(self, data, traversal=""):
if data:
traversal = self.inorder(data.left, traversal)
traversal = str(data.value)
traversal = self.inorder(data.right, traversal)
return traversal
'42513'
如果我附加到串列而不是連接字串,我不明白為什么行為會有所不同。有人可以向我解釋一下嗎?
uj5u.com熱心網友回復:
python中的字串是不可變的。你的遍歷累加器依賴于變異來作業。您可以修改它以實際使用回傳值,而不是依賴于改變“遍歷”資料結構。
if data:
t1 = self.inorder(data.left, "")
t2 = data.value
t3 = self.inorder(data.right, "")
traversal = t1 t2 t3
您可以(可能)對串列使用相同的技術。那時,您將不再需要在遞回呼叫中傳遞累加器。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/321839.html
上一篇:寫函式findEpidemics
下一篇:A*搜索中水壺問題的啟發式函式
