二叉樹的遍歷 python實現)

2022-07-10 17:18:16 字數 1910 閱讀 8825

目錄

二、前序遍歷

三、中序遍歷

四、後序遍歷

輸入根節點,使用佇列來遍歷。先進的節點會先出去,出去時將自己的子節點放到佇列中。

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 ...