# https://blog.csdn.net/yuesoda/article/details/89925738
# 樹
class Node:
def __init__(self, root, left=None, right=None):
self.root = root
self.left = left
self.right = right
# 樹深度
def max_depth(tree):
if not tree:
return 0
return max(max_depth(tree.left), max_depth(tree.right))+1
# 前序遍歷
def pre_order(tree):
if not tree:
return
print(tree.root, end=' ')
pre_order(tree.left)
pre_order(tree.right)
# 中序遍歷
def mid_order(tree):
if not tree:
return
mid_order(tree.left)
print(tree.root, end=' ')
mid_order(tree.right)
# 后序遍歷
def post_order(tree):
if not tree:
return
post_order(tree.left)
post_order(tree.right)
print(tree.root, end=' ')
# 層次遍歷
def bfs(tree):
if not tree:
return
queue = [] # 隊列先進先出
queue.append(tree)
while queue:
cur_node = queue.pop(0)
print(cur_node.root, end=' ')
if cur_node.left is not None:
queue.append(cur_node.left)
if cur_node.right is not None:
queue.append(cur_node.right)
# 深度遍歷
def dfs(tree):
if not tree:
return
print(tree.root, end=' ')
dfs(tree.left)
dfs(tree.right)
# 深度遍歷
def dfs_stack(tree):
if not tree:
return
stack = []
stack.append(tree)
while stack:
cur_node = stack.pop()
print(cur_node.root, end=' ')
if cur_node.right is not None:
stack.append(cur_node.right)
if cur_node.left is not None:
stack.append(cur_node.left)
# 中序遍歷
def mid_order_stack(tree):
stack=[]
while stack or tree:
while tree:
stack.append(tree)
tree=tree.left
tree=stack.pop()
print(tree.root, end=' ')
tree=tree.right
# 后序遍歷
def post_order_stack(tree):
if not tree:
return
stack = []
stack.append(tree)
res = []
while stack:
cur_node = stack.pop()
if cur_node.left is not None:
stack.append(cur_node.left)
if cur_node.right is not None:
stack.append(cur_node.right)
res.append(cur_node.root)
for i in res[::-1]:
print(i, end=' ')
tree = Node(5, Node(3,Node(2),Node(4)), Node(7,Node(6)))
print('deepth of the tree: \n', max_depth(tree))
print('pre_order: ')
pre_order(tree)
print('\nmid_order: ')
mid_order(tree)
print('\nmid_order_stack: ')
mid_order_stack(tree)
print('\npost_order: ')
post_order(tree)
print('\npost_order_stack: ')
post_order_stack(tree)
print('\nlevel_order: ')
bfs(tree)
print('\ndeep_order: ')
dfs(tree)
print('\ndeep_order: ')
dfs_stack(tree)
2021-01-26 二叉樹搜索
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
相關(guān)閱讀更多精彩內(nèi)容
- 1. 樹結(jié)構(gòu)示意圖 補充: 兄弟節(jié)點:具有相同父節(jié)點的節(jié)點互稱為兄弟節(jié)點。 樹的深度:從根節(jié)點開始(其深度為0)自...
- 滿二叉樹: 除最后一層無任何子節(jié)點外,每一層上的所有結(jié)點都有兩個子結(jié)點 完全二叉樹: 完全二叉樹是由滿二叉樹而引出...
- 1、概念 搜索二叉樹(Binary Search Tree - BST) 它的左子樹不空,則左子樹上所有結(jié)點的值均...
- 1、二叉樹 每個結(jié)點最多只有兩個子樹的樹結(jié)構(gòu) 2、BST(二叉搜索樹或二叉排序樹) 左子樹上所有結(jié)點的值均小于它的...
- 1從上往下打印二叉樹 【題目】從上往下打印出二叉樹的每個節(jié)點,同層節(jié)點從左至右打印。 【考察點】舉例讓抽象具體...