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

歡迎訪問 生活随笔!

生活随笔

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

python

Python二叉树遍历

發布時間:2025/3/12 python 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python二叉树遍历 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

樹的遍歷是樹的一種重要的運算。所謂遍歷是指對樹中所有結點的信息的訪問,即依次對樹中每個結點訪問一次且僅訪問一次,我們把這種對所有節點的訪問稱為遍歷(traversal)。那么樹的兩種重要的遍歷模式是深度優先遍歷和廣度優先遍歷,深度優先一般用遞歸,廣度優先一般用隊列。

一、廣度優先遍歷(層次遍歷)

從樹的root開始,從上到下從從左到右遍歷整個樹的節點

二、深度優先遍歷

對于一顆二叉樹,深度優先搜索(Depth First Search)是沿著樹的深度遍歷樹的節點,盡可能深的搜索樹的分支。

那么深度遍歷有重要的三種方法。這三種方式常被用于訪問樹的節點,它們之間的不同在于訪問每個節點的次序不同。這三種遍歷分別叫做先序遍歷(preorder),中序遍歷(inorder)和后序遍歷(postorder)。

1、先序遍歷 在先序遍歷中,我們先訪問根節點,然后遞歸使用先序遍歷訪問左子樹,再遞歸使用先序遍歷訪問右子樹
根節點->左子樹->右子樹

2、中序遍歷 在中序遍歷中,我們遞歸使用中序遍歷訪問左子樹,然后訪問根節點,最后再遞歸使用中序遍歷訪問右子樹
左子樹->根節點->右子樹

3、后序遍歷 在后序遍歷中,我們先遞歸使用后序遍歷訪問左子樹和右子樹,最后訪問根節點
左子樹->右子樹->根節點

''' 樹形結構 '''class Node(object):'''節點類'''def __init__(self, elem, lChild = None, rChild = None):self.elem = elemself.lChild = lChild #左子樹self.rChild = rChild #又子樹class Tree(object):'''二叉樹'''def __init__(self, node = None):self.root = nodedef add(self, item):'''添加子樹''''''思路1、先找到要添加元素的節點'''node = Node(item)if self.root is None:self.root = nodereturnli = [self.root]while li:cur_node = li.pop(0)if cur_node.lChild is not None:li.append(cur_node.lChild)else:cur_node.lChild = nodereturnif cur_node.rChild is not None:li.append(cur_node.rChild)else:cur_node.rChild = nodereturndef breadth_travel(self):'''廣度優先遍歷'''if self.root is None:returnli = [self.root]while li:cur_node = li.pop(0)print(cur_node.elem, end=' ')if cur_node.lChild is not None:li.append(cur_node.lChild)if cur_node.rChild is not None:li.append(cur_node.rChild)print(' ')def preorder(self, node):'''先序遍歷'''if node is None:returnprint(node.elem, end=' ')self.preorder(node.lChild)self.preorder(node.rChild)def inorder(self, node):'''中序優先遍歷'''if node is None:returnself.preorder(node.lChild)print(node.elem, end=' ')self.preorder(node.rChild)def postorder(self, node):'''后續優先遍歷'''if node is None:returnself.preorder(node.lChild)self.preorder(node.rChild)print(node.elem, end=' ')if __name__ == "__main__":tree = Tree()tree.add(0)tree.add(1)tree.add(2)tree.add(3)tree.add(4)tree.add(5)tree.add(6)tree.add(7)tree.add(8)tree.add(9)tree.breadth_travel()print(" - ")tree.preorder(tree.root)print(" ")tree.inorder(tree.root)print(" ")tree.postorder(tree.root)print(" ")

?

總結

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

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