排序二叉树
排序二叉树
乱序数据的插入的时候,需要遵从一个准则:
- 插入的第一个元素作为树的根节点
- 后序插入的元素,如果比根节点小,插入到根节点的左侧;如果比根节点大,插入到根节点的右侧,即左小右大
由结果可以看出,排序二叉树中利用中序遍历可以获得有序数列
例:对3,8,5,7,6,2,9,4,1乱序数字进行排列。
# 排序二叉树
# 创建节点
class Node():
def __init__(self, item):
self.item = item
self.right = None
self.left = None
# 创建一个树
class SortTree():
def __init__(self):
self.root = None
# 插入节点
def add(self, item):
node = Node(item)
cur = self.root
# 判断特殊情况:当根节点为空那么直接赋值插入的第一个元素
if self.root == None:
self.root = node
return
# 普通情况:若比根节点小插入到根节点左侧,若比根节点大插入到根节点右侧
while True:
# 向右插入节点
if cur.item < item: # 如果根节点小于插入节点
if cur.right == None: # 插入节点的前提是右叶子节点空
cur.right = node
return
else:
cur = cur.right # 移位
# 向左插入节点
else:
if cur.left == None:
cur.left = node
return
else:
cur = cur.left
# 前序遍历
def forward(self, root):
if root == None:
return
print(root.item)
self.forward(root.left)
self.forward(root.right)
# 中序遍历
def middle(self, root):
if root == None:
return
self.forward(root.left)
print(root.item)
self.forward(root.right)
# 后序遍历
def back(self, root):
if root == None:
return
self.forward(root.left)
self.forward(root.right)
print(root.item)
alist = [3, 8, 5, 7, 6, 2, 9, 4, 1]
tree = SortTree()
for i in alist:
tree.add(i)
# tree.forward(tree.root)
tree.middle(tree.root)
# tree.back(tree.root)