1. 程式人生 > >Python資料結構——二叉樹排序

Python資料結構——二叉樹排序

二叉排序樹的過程主要是:二叉樹的構建和遍歷。

當樹構建好後,對樹進行中序遍歷(左中右),即可得到,對資料從小到大排序的結果。

如果對樹進行“右中左遍歷”,則可以得到,對資料從大到小排序的結果

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