"""
bitree.py 二叉樹的簡單實踐
思路分析:
1. 使用鏈式存儲,一個Node表示一個樹的節(jié)點
2. 節(jié)點考慮使用兩個屬性變量分別表示左連接和右連接
"""
from squeue import *
# 二叉樹節(jié)點
class Node:
def __init__(self,val,left=None,right = None):
self.val = val
self.left = left
self.right = right
# 二叉樹遍歷類
class Bitree:
def __init__(self,root = None):
self.root = root
# 先序遍歷
def preOrder(self,node):
if node is None: # 終止條件
return
print(node.val,end = '')
self.preOrder(node.left)
self.preOrder(node.right)
# 中序遍歷
def inOrder(self, node):
if node is None: # 終止條件
return
self.inOrder(node.left)
print(node.val,end = "")
self.inOrder(node.right)
# 后序遍歷
def postOrder(self, node):
if node is None: # 終止條件
return
self.postOrder(node.left)
self.postOrder(node.right)
print(node.val, end="")
# 層次遍歷
def levelOrder(self,node):
"""
讓初始節(jié)點先入隊,誰出隊就遍歷誰,并且讓它的左右孩子分別入隊,直到隊列為空
"""
sq = SQueue()
sq.enqueue(node) # 初始節(jié)點入隊
while not sq.is_empty():
node = sq.dequeue()
# 打印出隊元素
print(node.val,end='')
if node.left:
sq.enqueue(node.left)
if node.right:
sq.enqueue(node.right)
if __name__ == "__main__":
# B F G D I H E C A
# 根據(jù)后續(xù)遍歷構建二叉樹
b = Node('B')
f = Node('F')
g = Node('G')
d = Node('D',f,g)
i = Node('I')
h = Node('H')
e = Node('E',i,h)
c = Node('C',d,e)
a = Node('A',b,c) #樹根
# 將a作為遍歷的起始位置
bt = Bitree(a)
bt.preOrder(bt.root)
print()
bt.inOrder(bt.root)
print()
bt.postOrder(bt.root)
print()
bt.levelOrder(bt.root)
二叉樹遍歷
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
相關閱讀更多精彩內容
- 引子:五分鐘玩轉面試考點-數(shù)據(jù)結構系列,不會像那種嚴肅、古板的教科書般的博客文章,而是將晦澀難懂的概念和知識點盡可...
- 注:本文來自 左程云的書《程序員代碼面試指南》 題目:分別用遞歸和非遞歸方法,實現(xiàn)二叉樹的先序遍歷(根左右)、中序...
- 前言 二叉樹作為一種非?;A但十分重要的數(shù)據(jù)結構,在排序、搜索、編碼、甚至文件系統(tǒng)管理等方面都有廣泛應用。今天,我...