1.定义
二叉排序树(BinarySortTree)定义如下:
二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
由定义可知二叉排序树左子树结点值小于它的根节点值,右子树的值大于它的根节点值。
如图所示。
2.实现
二叉排序树有3个操作,分别是插入,删除,查找。
查找:
步骤:
首先查找头结点,如果等于要查找的值,则成功找到,返回,如果它的值大于查找的值,递归调用左子树,如果小于查找的值,递归调用右子树。
实现:
首先定义一个二叉树的类:
#二叉链表实现二叉树
class Tree:
__value=None
__lChild=None
__rChild=None
def __init__(self,value=None):
self.__value=value
def get_lChild(self):
return self.__lChild
def set_lChild(self,lChild):
self.__lChild=lChild
def get_rChild(self):
return self.__rChild
def set_rChild(self,rChild):
self.__rChild=rChild
def get_value(self):
return self.__value
def set_value(self,value):
self.__value=value
查找方法:
#查找操作 树的头结点 要查找的键
def select(self,head,key):
node=head
flag=False
n1=node
#print(node==head)
#print(node==None)
while True:
if node == None:
node=n1
break
elif node.get_value() == key:
#print(node.get_value(), key)
flag=True
break
elif key > node.get_value():
n1 = node