2021-01-26 二叉樹搜索

# 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)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容