嗨,我制作了一個簡單的二叉樹并添加了一個預序遍歷方法。在拋出一些想法之后,我陷入了尋找一種方法來從traverse_pre()陣列中的方法中回傳每個值的方法。
class BST:
def __init__(self, val):
self.value = val
self.left = None
self.right = None
def add_child(self, val):
if self.value:
if val < self.value:
if self.left == None:
self.left = BST(val)
else:
self.left.add_child(val)
else:
if val > self.value:
if self.right == None:
self.right = BST(val)
else:
self.right.add_child(val)
else:
self.value = val
def traverse_pre(self):
if self.left:
self.left.traverse_pre()
print(self.value)
if self.right:
self.right.traverse_pre()
Tree = BST(5)
Tree.add_child(10)
Tree.add_child(8)
Tree.add_child(2)
Tree.add_child(4)
Tree.add_child(7)
Tree.traverse_pre()
我將如何修改traverse_pre()函式以回傳由節點值組成的陣列。是否有這個程序的一個很好的例子讓我進一步理解這一點,我對如何將值附加到遞回中的陣列有點困惑。
uj5u.com熱心網友回復:
這是我將如何做到的 - 所有分支都回傳它們的子元素串列。
如果一個節點沒有子元素,它只回傳它自己的值。否則,它還包含來自子項的元素。
Extend 將子節點結果串列中的所有元素添加到父節點結果串列中。
class BST:
def __init__(self, val):
self.value = val
self.left = None
self.right = None
def add_child(self, val):
if self.value:
if val < self.value:
if self.left == None:
self.left = BST(val)
else:
self.left.add_child(val)
else:
if val > self.value:
if self.right == None:
self.right = BST(val)
else:
self.right.add_child(val)
else:
self.value = val
def traverse_pre(self):
results = []
if self.left:
results.extend(self.left.traverse_pre())
results.append(self.value)
if self.right:
results.extend(self.right.traverse_pre())
return results
Tree = BST(5)
Tree.add_child(10)
Tree.add_child(8)
Tree.add_child(2)
Tree.add_child(4)
Tree.add_child(7)
print(Tree.traverse_pre())
uj5u.com熱心網友回復:
您可以將陣列用作全域變數,并且在 traverse_pre() 函式中,您可以將值附加到該陣列中,而不是將其列印出來。
arr = []
class BST:
def __init__(self, val):
self.value = val
self.left = None
self.right = None
def add_child(self, val):
if self.value:
if val < self.value:
if self.left == None:
self.left = BST(val)
else:
self.left.add_child(val)
else:
if val > self.value:
if self.right == None:
self.right = BST(val)
else:
self.right.add_child(val)
else:
self.value = val
def traverse_pre(self):
if self.left:
self.left.traverse_pre()
arr.append(self.value)
if self.right:
self.right.traverse_pre()
Tree = BST(5)
Tree.add_child(10)
Tree.add_child(8)
Tree.add_child(2)
Tree.add_child(4)
Tree.add_child(7)
Tree.traverse_pre()
print(arr)
uj5u.com熱心網友回復:
我會像這樣處理這個問題:
def traverse_pre(self):
rslt = [self.value]
if self.left:
rslt.extend(self.left.traverse_pre())
if self.right:
rslt.extend(self.right.traverse_pre())
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/403711.html
標籤:
