二叉排序树的过程主要是:二叉树的构建和遍历。
当树构建好后,对树进行中序遍历(左中右),即可得到,对数据从小到大排序的结果。
如果对树进行“右中左遍历”,则可以得到,对数据从大到小排序的结果
# -*- 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