二叉樹的遍歷(python實現)
阿新 • • 發佈:2020-12-24
目錄
一、層序遍歷
1.使用佇列實現
輸入根節點,使用佇列來遍歷。先進的節點會先出去,出去時將自己的子節點放到佇列中。
def level(root): if not root: return None queue=[root] res=[] while queue: node = queue.pop(0) res.append(node) if node.left: queue.append(node.left) if node.right: queue.append(node.right) return res
2.使用遞迴實現
result = [] def add_to_result(level, node): if not node: return None if level > len(result) - 1: result.append([]) #到達新的一層的開頭,要初始化一層 result[level].append(node.val) add_to_result(level+1, node.left) add_to_result(level+1, node.right) add_to_result(0, root) return result
二、前序遍歷
1.遞迴
遍歷順序:根--左子樹--右子樹
res=[]
def preorder(root):
if not root:
return None
res.append(root.val)
preorder(root.left)
preorder(root.right)
2.迭代
使用棧,先進後出,遍歷左節點,知道葉子節點。然後出棧,遍歷上一級的右節點,然後再出.......
res = [ ] stack = [] node = root while res or len(stack)>0: while node: stack.append(node) res.append(node.val) node = node.left node = stack.pop() node = node.right
三、中序遍歷
1.遞迴
遍歷順序:左子樹--根--右子樹
res=[]
def midorder(root):
if not root:
return None
midorder(root.left)
res.append(root.val) #呼叫順序更改一下
midorder(root.right)
2.迭代
res = [ ]
stack = []
node = root
while res or len(stack)>0:
while node:
stack.append(node)
node = node.left #到達最深的左節點
node = stack.pop()
res.append(node.val) #出棧後再加入結果
node = node.right
四、後序遍歷
1.遞迴
遍歷順序:左子樹--右子樹--根
res=[]
def postorder(root):
if not root:
return None
postorder(root.left)
postorder(root.right)
res.append(root.val)
postorder(root)
2.迭代
和前序遍歷思路一樣,不過先遍歷右子樹,最後將結果逆序
res=[]
stack = []
node = root
if not root:
return None
while node or len(stack)>0:
while node:
stack.append(node)
res.append(node.val)
node = node.right
node = stack.pop()
node = node.left
return res[::-1]