目錄
二、前序遍歷
三、中序遍歷
四、後序遍歷
輸入根節點,使用佇列來遍歷。先進的節點會先出去,出去時將自己的子節點放到佇列中。
def level(root):
if not root:
return none
queue=[root]
res=
while queue:
node = queue.pop(0)
if node.left:
if node.right:
return res
result =
def add_to_result(level, node):
if not node:
return none
if level > len(result) - 1:
add_to_result(level+1, node.left)
add_to_result(level+1, node.right)
add_to_result(0, root)
return result
遍歷順序:根--左子樹--右子樹
res=
def preorder(root):
if not root:
return none
preorder(root.left)
preorder(root.right)
使用棧,先進後出,遍歷左節點,知道葉子節點。然後出棧,遍歷上一級的右節點,然後再出.......
res = [ ]
stack =
node = root
while res or len(stack)>0:
while node:
node = node.left
node = stack.pop()
node = node.right
遍歷順序:左子樹--根--右子樹
res=
def midorder(root):
if not root:
return none
midorder(root.left)
midorder(root.right)
res = [ ]
stack =
node = root
while res or len(stack)>0:
while node:
node = node.left #到達最深的左節點
node = stack.pop()
node = node.right
遍歷順序:左子樹--右子樹--根
res=
def postorder(root):
if not root:
return none
postorder(root.left)
postorder(root.right)
postorder(root)
和前序遍歷思路一樣,不過先遍歷右子樹,最後將結果逆序
res=
stack =
node = root
if not root:
return none
while node or len(stack)>0:
while node:
node = node.right
node = stack.pop()
node = node.left
return res[::-1]
python實現二叉樹的遍歷
先序 1.訪問根結點 2.訪問左子樹 3.訪問右子樹 中序 1.訪問左子樹 2.訪問根結點 3.訪問右子樹 後序 1.訪問左子樹 2.訪問右子樹 3.訪問根結點 節點類 def init self,elem 1,lchild none,rchild none self.elem elem self....
python遍歷二叉樹
定義二叉樹 class treenode def init self,x self.val x self.left none self.right none 構建二叉樹 返回構造的treenode根節點 defreconstructbinarytree self,pre,tin ifnot pre ...
python實現二叉樹深度遍歷
其實深度優先遍歷你可以把它看成是前序遍歷,比如對於如下二叉樹 其深度遍歷的結果是 1,2,4,8,9,5,3,6,7 一 採用遞迴的方式進行遍歷。二 利用棧,先將根入棧,再將根出棧,並將根的右子樹,左子樹存入棧,按照棧的先進後出規則來實現深度優先遍歷。class node 節點類 def init ...