Python資料結構——二叉樹排序
阿新 • • 發佈:2018-11-19
二叉排序樹的過程主要是:二叉樹的構建和遍歷。
當樹構建好後,對樹進行中序遍歷(左中右),即可得到,對資料從小到大排序的結果。
如果對樹進行“右中左遍歷”,則可以得到,對資料從大到小排序的結果
# -*- coding:utf-8 -*- # file: pySort.py # class BTree: # 二叉樹節點 def __init__(self, value): # 初始化函式 self.left = None # 左兒子 self.data = value # 節點值 self.right = None # 右兒子 def insertLeft(self, value): # 向左子樹插入節點 self.left = BTree(value) return self.left def insertRight(self, value): # 向右子樹插入節點 self.right = BTree(value) return self.right def show(self): # 輸出節點資料 print(self.data) def inorder(node): # 中序遍歷 if node.data: if node.left: inorder(node.left) node.show() if node.right: inorder(node.right) def rinorder(node): # 中序遍歷,先遍歷右子樹 if node.data: if node.right: rinorder(node.right) node.show() if node.left: rinorder(node.left) def insert(node, value): if value > node.data: if node.right: insert(node.right, value) else: node.insertRight(value) else: if node.left: insert(node.left, value) else: node.insertLeft(value) if __name__ == '__main__': l = [3, 5 , 7, 20, 43, 2, 15, 30] Root = BTree(l[0]) # 根節點 node = Root for i in range(1, len(l)): insert(Root, l[i]) print('*****************************') print(' 從小到大') print('*****************************') inorder(Root) print('*****************************') print(' 從大到小') print('*****************************') rinorder(Root)
執行結果如下:
Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)] on win32 Type "copyright", "credits" or "license()" for more information. >>> == RESTART: G:\pySort.py == ***************************** 從小到大 ***************************** 2 3 5 7 15 20 30 43 ***************************** 從大到小 ***************************** 43 30 20 15 7 5 3 2