日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 二叉树遍历

發布時間:2025/4/5 python 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 二叉树遍历 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Mon May 13 15:48:30 2019@author: lg """class Node():#節點類def __init__(self,data = -1):self.data = dataself.left = Noneself.right = None class Tree():#樹類def __init__(self):self.root = Node()def add(self,data):# 為樹加入節點node = Node(data)if self.root.data == -1: #如果樹為空,就對根節點賦值self.root = nodeelse:myQueue = []treeNode = self.rootmyQueue.append(treeNode)while myQueue: #對已有的節點進行層次遍歷treeNode = myQueue.pop(0)if not treeNode.left:treeNode.left = nodereturnelif not treeNode.right:treeNode.right = nodereturnelse:myQueue.append(treeNode.left)myQueue.append(treeNode.right)def pre_order_recursion(self,root): #遞歸實現前序遍歷if not root:returnprint( root.data,)self.pre_order_recursion(root.left)self.pre_order_recursion(root.right)def pre_order_stack(self,root): #堆棧實現前序遍歷(非遞歸)if not root:returnmyStack = []node = rootwhile myStack or node:while node: #從根節點開始,一直尋找他的左子樹print (node.data,)myStack.append(node)node = node.leftnode = myStack.pop() #while結束表示當前節點node為空,即前一個節點沒有左子樹了node = node.right #開始查看它的右子樹def in_order_recursion(self,root): #遞歸實現中序遍歷if not root:returnself.in_order_recursion(root.left)print( root.data,)self.in_order_recursion(root.right)def in_order_stack(self,root): #堆棧實現中序遍歷(非遞歸)if not root:returnmyStack = []node = rootwhile myStack or node: #從根節點開始,一直尋找它的左子樹while node:myStack.append(node)node = node.leftnode = myStack.pop()print(node.data,)node = node.rightdef post_order_recursion(self,root): #遞歸實現后序遍歷if not root:returnself.post_order_recursion(root.left)self.post_order_recursion(root.right)print( root.data,)def post_order_stack(self, root): # 堆棧實現后序遍歷(非遞歸)# 先遍歷根節點,再遍歷右子樹,最后是左子樹,這樣就可以轉化為和先序遍歷一個類型了,最后只把遍歷結果逆序輸出就OK了。if not root:returnmyStack1 = []myStack2 = []node = rootwhile myStack1 or node:while node:myStack2.append(node)myStack1.append(node)node = node.rightnode = myStack1.pop()node = node.leftwhile myStack2:print( myStack2.pop().data,)def level_order_queue(self,root): #隊列實現層次遍歷(非遞歸)if not root :returnmyQueue = []node = rootmyQueue.append(node)while myQueue:node = myQueue.pop(0)print( node.data,)if node.left:myQueue.append(node.left)if node.right:myQueue.append(node.right)if __name__ == '__main__':#主函數datas = [2,3,4,5,6,7,8,9]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)

總結

以上是生活随笔為你收集整理的python 二叉树遍历的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。