遞迴方法:
class treenode(object):
def __init__(self,x):
self.val=x
#左子樹
self.left=none
#右子樹
self.right=none
def pre(root):
if root==none:
return none
#先序遍歷
print(root.val)
pre(root.left)
pre(root.right)
def pre_middle(root):
if root==none:
return none
#中序遍歷
pre(root.left)
print(root.val)
pre(root.right)
def pre_last(root):
if root==none:
return none
#後序遍歷
pre(root.left)
pre(root.right)
print(root.val)
if __name__ == '__main__':
t1=treenode(1)
t2 = treenode(2)
t3 = treenode(3)
t4 = treenode(4)
t5 = treenode(5)
t6 = treenode(6)
t7 = treenode(7)
t8 = treenode(8)
#設定 t1 的left節點屬性 是t2
t1.left=t2
#設定t1的right節點的屬性是t3
t1.right=t3
#設定t2的left節點是t4
t2.left=t4
# 設定t2的right節點是t5
t2.right=t5
# 設定t3的left節點是t6
t3.left=t6
# 設定t3的right節點是t7
t3.right=t7
# 設定t6的right節點是t8
t6.right=t8
pre(t1)
pre_middle(t1)
pre_last(t1)
非遞迴的方法:
class treenode(object):
def __init__(self,x):
self.val=x
#左子樹
self.left=none
#右子樹
self.right=none
#非遞迴先序遍歷
def pre_no1(root):
if root==none:
return none
stack=
tempnode=root
while tempnode or stack:
while tempnode:
print(tempnode.val)
tempnode=tempnode.left
node=stack.pop()
tempnode=node.right
#非遞迴中序遍歷
def pre_no2(root):
if root==none:
return none
stack=
tempnode=root
while tempnode or stack:
while tempnode:
tempnode=tempnode.left
node=stack.pop()
print(node.val)
tempnode=node.right
#非遞迴後序遍歷
def pre_no3(root):
if root==none:
return none
stack=
tempnode=root
while tempnode or stack:
while tempnode:
tempnode=tempnode.left
node=stack[-1]
tempnode=node.right
if node.right==none:
print(node.val)
node=stack.pop()
while stack and node==stack[-1].right:
node=stack.pop()
print(node.val)
if __name__ == '__main__':
t1=treenode(1)
t2 = treenode(2)
t3 = treenode(3)
t4 = treenode(4)
t5 = treenode(5)
t6 = treenode(6)
t7 = treenode(7)
t8 = treenode(8)
#設定 t1 的left節點屬性 是t2
t1.left=t2
#設定t1的right節點的屬性是t3
t1.right=t3
#設定t2的left節點是t4
t2.left=t4
# 設定t2的right節點是t5
t2.right=t5
# 設定t3的left節點是t6
t3.left=t6
# 設定t3的right節點是t7
t3.right=t7
# 設定t6的right節點是t8
t6.right=t8
pre_no1(t1)
pre_no2(t1)
pre_no3(t1)
python遍歷二叉樹
定義二叉樹 class treenode def init self,x self.val x self.left none self.right none 構建二叉樹 返回構造的treenode根節點 defreconstructbinarytree self,pre,tin ifnot pre ...
二叉樹的遍歷 二叉樹遍歷與儲存
在資料結構中,二叉樹是非常重要的結構。例如 資料庫中經常用到b 樹結構。那麼資料庫是如何去單個查詢或者範圍查詢?首先得理解二叉樹的幾種遍歷順序 先序 中序 後序 層次遍歷。先序 根節點 左子樹 右子樹 中序 左子樹 根節點 右子樹 後序 左子樹 右子樹 根節點 按層級 class node if c...
構建二叉樹 遍歷二叉樹
陣列法構建二叉樹 public class main public static void main string args 用陣列的方式構建二叉樹 public static void createbintree 把linkedlist集合轉成二叉樹的形式 for int j 0 j 最後乙個父節...