二叉排序树,又叫做二叉搜索树或者二叉查找树,它具有以下性质:
- 若左子树不为空,则左子树上所有节点的值均小于或等于它的根节点的值。
- 若右子树不为空,则右子树上所有节点的值均大于或等于它的根节点的值。
- 左、右子树也分别为二叉搜索树。
构建二叉查找树及其操作
class BSTNode:
"""
定义一个二叉树节点类。
以讨论算法为主,忽略了一些诸如对数据类型进行判断的问题。
"""
def __init__(self, data):
"""
初始化
:param data: 节点储存的数据
:param left: 节点左子树
:param right: 节点右子树
"""
self.data = data
self.left = None
self.right = None
class BinarySortTree:
"""
基于BSTNode类的二叉排序树。
"""
#初始化二叉排序树
def __init__(self):
self._root = None
#判空
def is_empty(self):
return self._root is None
#查找
def search(self, key):
"""
如果关键字的值等于cur_node的值,则返回,如果小于,则寻找左子树,反之,寻找右子树
:param key: 关键字
:return: 查询节点或None
"""
cur_node = self._root
while cur_node:
if key < cur_node.data:
cur_node = cur_node.left
elif key > cur_node.data:
cur_node = cur_node.right
else:
return cur_node.data
return None
def insert(self, key):
"""
插入操作
:param key:关键字
:return: 布尔值
"""
#如果树为空,则将关键字作为二叉树的根节点
if self.is_empty():
self._root = BSTNode(key)
cur_node = self._root
while True:
if key <<