定義樹節點
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次。中序遍歷 先向左遞迴查詢,如果左子樹沒有,再比較當前節點,如果仍然不是則向右遍歷查詢。後序遍歷 先向左遞迴查詢,如果...