class node():
def __init__(self,data=-1):
self.data=data
self.left=none
self.right=none
class tree():
def __init__(self):
self.root=node()
def add(self, data):
# 為樹加入節點
node = node(data)
if self.root.data == -1: # 如果樹為空,就對根節點賦值
self.root = node
else:
myqueue =
treenode = self.root
while myqueue: # 對已有的節點進行層次遍歷
treenode = myqueue.pop(0)
if not treenode.left:
treenode.left = node
return
elif not treenode.right:
treenode.right = node
return
else:
def pre_order_recursion(self,root): # 遞迴實現前序遍歷
if not root:
return
print(root.data)
self.pre_order_recursion(root.left)
self.pre_order_recursion(root.right)
def pre_order_stack(self,root):#堆疊實現前序遍歷(非遞迴)
if not root:
return
mystack=
node=root
while mystack or node:
while node: # 從根節點開始,一直尋找他的左子樹
print(node.data)
node=node.left
node=mystack.pop()# while結束表示當前節點node為空,即前乙個節點沒有左子樹了
node=node.right #開始檢視它的右子樹
def in_order_recursion(self,root):# 遞迴實現中序遍歷
if not root:
return
self.in_order_recursion(root.left)
print(root.data)
self.in_order_recursion(root.right)
def in_order_stack(self,root):# 堆疊實現中序遍歷(非遞迴)
if not root:
return
mystack=
node=root
while node or mystack:# 從根節點開始,一直尋找它的左子樹
while node:
node=node.left
node=mystack.pop()
print(node.data)
node=node.right
def post_order_recursion(self,root): # 遞迴實現後序遍歷
if not root:
return
self.post_order_recursion(root.left)
self.post_order_recursion(root.right)
print(root.data)
def post_order_stack(self,root): # 堆疊實現後序遍歷(非遞迴)
# 先遍歷根節點,再遍歷右子樹,最後是左子樹,這樣就可以轉化為和先序遍歷乙個型別了,最後只把遍歷結果逆序輸出就ok了
if not root:
return
mystack1=
mystack2=# stack2是為了逆序輸出
node=root
while node or mystack1:
while node:
node=node.right
node=mystack1.pop()
node=node.left
while mystack2:
print(mystack2.pop().data)
def level_order_queue(self,root):# 佇列實現層次遍歷(非遞迴)
if not root:
return
myqueue=
node=root
while myqueue:
node=myqueue.pop(0)
print(node.data)
if node.left:
if node.right:
if __name__ == '__main__':
# 主函式
datas = [1, 2, 3, 4]
tree = tree() # 新建乙個樹物件
for data in datas:
tree.add(data) # 逐個加入樹的節點
print('遞迴實現前序遍歷:')
tree.pre_order_recursion(tree.root)
print('\n堆疊實現前序遍歷')
tree.pre_order_stack(tree.root)
print("\n\n遞迴實現中序遍歷:")
tree.in_order_recursion(tree.root)
print("\n堆疊實現中序遍歷:")
tree.in_order_stack(tree.root)
print('\n\n遞迴實現後序遍歷:')
tree.post_order_recursion(tree.root)
print('\n堆疊實現後序遍歷:')
tree.post_order_stack(tree.root)
print('\n\n佇列實現層次遍歷:')
tree.level_order_queue(tree.root)
結果:
d:\anaconda\python.exe e:/pythonwork/python實現二叉樹及其遍歷.py
遞迴實現前序遍歷:12
43堆疊實現前序遍歷12
43遞迴實現中序遍歷:42
13堆疊實現中序遍歷:42
13遞迴實現後序遍歷:42
31堆疊實現後序遍歷:42
31佇列實現層次遍歷:12
34process finished with exit code 0
二叉樹及其遍歷
滿二叉樹肯定是完全二叉樹,完全二叉樹不一定是滿二叉樹 二叉樹的遍歷 先序遍歷 也叫做先根遍歷 前序遍歷,首先訪問根結點然後遍歷左子樹,最後遍歷右子樹。在遍歷左 右子樹時,仍然先訪問根結點,然後遍歷左子樹,最後遍歷右子樹,如果二叉樹為空則返回。中序遍歷 首先遍歷左子樹,然後訪問根結點,最後遍歷右子樹。...
二叉樹及其遍歷
二叉樹是乙個很重要的儲存結構,所以和大家分享一下我對二叉樹的理解並結合 希望讓大家都能對二叉樹有乙個最清晰的認識 首先,二叉樹是每個節點最多有兩個子樹的樹結構,這是二叉樹的定義,二叉樹的結構如下圖 可以看到二叉樹必要的是根節點,也就是a,每個節點都會有左子節點和右子節點,那麼從b開始看,它又是乙個二...
二叉樹及其應用 二叉樹遍歷
給定二叉樹的廣義表表示,構造二叉樹並輸出二叉樹的四種遍歷順序。輸入說明 輸入僅一行,該行僅由 以及大小寫字元構成的二叉樹的廣義表表示,字串長度不超過100。輸出說明 在接下來的四行中依行輸出二叉樹的四種遍歷 輸入樣列 a b d,c e,f h 輸出樣列 abdcefh dbaecfh dbehfc...