使用遞歸前序遍歷二叉樹的一點問題
def preorder(self,root): # 先序遍歷(遞歸)
if root is None:
return []
result = [root.item]
left_item = self.preorder(root.left_child)# 先遍歷完左子樹的所有左子樹
right_item = self.preorder(root.right_child)
return result + left_item + right_item
在遍歷完左子樹的所有左子樹後,進入 right_item = self.preorder(root.right_child) 。這個時候,已經遍歷過的節點值自動成爲了一個列表,讓我很奇怪。return語句也是在left_item和right_item語句執行完畢之後才執行的,應該沒有地方可以合併列表纔對。
如果改成
def preorder(self,root):
if root is None:
return []
print= root.item # 這樣就比較直觀,可以得到一個節點的值,就打印出來,是合理的
left_item = self.preorder(root.left_child)
right_item = self.preorder(root.right_child)
return result + left_item + right_item
就更容易一點