二叉樹查詢演算法

2021-09-12 17:33:26 字數 3014 閱讀 4000

定義樹節點

class

treenode

:def

__init__

(self, x)

: self.val = x

self.left =

none

self.right =

none

先序遍歷,遞迴

def

preorder

(root:treenode)

:"""遞迴地,先序遍歷二叉樹"""

if root ==

none

:return

else

:print

(root.val)

preorder(root.left)

preorder(root.right)

中序遍歷,遞迴

def

inorder

(root:treenode)

:"""遞迴地,中序遍歷二叉樹"""

if root ==

none

:return

else

: inorder(root.left)

print

(root.val)

inorder(root.right)

後序遍歷,遞迴

def

postorder

(root:treenode)

:"""遞迴地,後序遍歷二叉樹"""

if root ==

none

:return

else

: postorder(root.left)

postorder(root.right)

print

(root.val)

層序遍歷,遞迴

def

levelorder

(root:treenode)

:"""遞迴,層序遍歷二叉樹"""

level=

0while printlevel(root,level)

: level +=

1def

printlevel

(root:treenode, level)

:"""遞迴,層序遍歷二叉樹,列印一層"""

if root==

none

or level<0:

return

false

elif level ==0:

print

(root.val)

return

true

else

:return printlevel(root.left, level-1)

+ printlevel(root.right, level-

1)

先序遍歷,非遞迴

def

preorderwithstack

(root:treenode)

:"""非遞迴,先序遍歷二叉樹"""

stack =

pnode = root

while pnode or

len(stack)

>0:

while pnode:

print

(pnode)

pnode = pnode.left

iflen(stack)

>0:

pnode = stack.pop(

).right

中序遍歷,非遞迴

def

inorderwithstack

(root:treenode)

:"""非遞迴,中序遍歷二叉樹"""

stack =

pnode = root

while pnode or

len(stack)

>0:

while pnode:

pnode = pnode.left

iflen(stack)

>0:

top = stack.pop(

)print

(top.val)

pnode = top.right

後序遍歷,非遞迴,這個略複雜

def

postorderwithstack

(root:treenode)

:"""非遞迴,後序遍歷二叉樹,需要記錄前乙個輸出的節點"""

stack =

pnode = root

while

len(stack)

>0:

top = stack[:-

1]if(

not pnode.right and

not pnode.left) \

or(pre and

(pre==pnode.left or pre==pnode.right)):

print

(top.val)

pre = stack.pop(

)if pnode.right:

if pnode.left:

層序遍歷,非遞迴

def

levelorderwithstack

(root:treenode)

:"""非遞迴,層序遍歷二叉樹"""

stack=

tempstack =

while

len(stack)

>0:

for x in stack:

print

(x.val)

if x.left:

if x.right:

stack = tempstack

tempstack=

二叉樹 二叉查詢樹

構建二叉樹,判斷是否為二叉查詢樹,遞迴先序遍歷,非遞迴中序遍歷 include include include include using namespace std 二叉樹結點 struct treenode 鍊錶結點 struct listnode struct tempnodetempnode...

二叉樹 二叉查詢樹

二叉樹 binary tree 一種樹型結構,每個節點最多擁有兩個節點。如下圖 幾種型別的二叉樹 1.full binary tree 每個節點的孩子數 是 0 或者 2.對高度沒有要求。如下圖 2.perfect binary tree 這個就是最完美的樹,顧名思義,所有葉子節點都有相同的深度,並...

二叉樹 二叉樹的查詢

三種查詢方式 前序查詢 中序查詢 後序查詢。前序查詢 比較當前節點,如果是,返回查詢結果。如果不是就向左遞迴查詢,如果左邊沒有就向右邊遞迴查詢。設定no 5,針對該題,前序遍歷共4次。中序遍歷 先向左遞迴查詢,如果左子樹沒有,再比較當前節點,如果仍然不是則向右遍歷查詢。後序遍歷 先向左遞迴查詢,如果...