Python数据结构——二叉树排序

版权声明:转载请注明出处 https://blog.csdn.net/Rex_WUST/article/details/83274507

二叉排序树的过程主要是:二叉树的构建和遍历。

当树构建好后,对树进行中序遍历(左中右),即可得到,对数据从小到大排序的结果。

如果对树进行“右中左遍历”,则可以得到,对数据从大到小排序的结果

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

猜你喜欢

转载自blog.csdn.net/Rex_WUST/article/details/83274507