算法【排序二叉树】
二叉排序树(Binary Sort Tree),又称"二叉查找树"(Binary Search Tree),亦称"二叉搜索树"。是数据结构中的一类。在一般情况下,查询效率比链表结构要高。
定义
一棵空树,或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
(4)没有键值相等的结点。
class Node():
def __init__(self,item):
self.item = item
self.left = None
self.right = None
class SortTree():
def __init__(self):
self.root = None
def add(self,item):
node = Node(item)
#树为空
if self.root == None:
self.root = node
return
#树为非空
cur = self.root
while True:
if cur.item < item:
#插入节点的值大于根节点,将节点插入到根节点右侧
if cur.right == None:
cur.right = node
break
else:
cur = cur.right
else:
#将节点插入到根节点的左侧
if cur.left == None:
cur.left = node
break
else:
cur = cur.left
def middle(self,root):
if root == None:
return
self.middle(root.left)
print(root.item)
self.middle(root.right)
tree = SortTree()
alist = [3,8,5,7,6,2,1,4]
for i in alist:
tree.add(i)
tree.middle(tree.root)
>>>
1
2
3
4
5
6
7
8