1 二叉搜索树
1.1 二叉搜索树-插入
1.2 二叉搜索树-查询
1.3 二叉搜索树-删除
1 二叉搜索树
二叉搜索树是一颗二叉树且满足性质:设是二叉树的一个节点。
如果y是x左子树的一个节点,那么y.key< x.key;如果y是x右子树的一个节点,那么y.key > x.key。
二叉搜索树的操作:查询、插入、删除
1.1 二叉搜索树-插入
class BiTreeNode:
def __init__(self, data):
"""
初始化二叉树节点
:param data: 节点的值
"""
self.data = data # 节点的值
self.lchild = None # 左子节点
self.rchild = None # 右子节点
self.parent = None # 父节点
class BST:
def __init__(self, li: list):
"""
初始化二叉搜索树,并插入给定的值
:param li: 包含插入值的列表
"""
self.root = None # 初始化根节点为空
if li:
for val in li:
self.insert_no_rec(val) # 使用非递归插入方法将列表中的值插入树中
def insert(self, node, val):
"""
递归插入节点到二叉搜索树中
:param node: 当前节点
:param val: 要插入的值
:return: 插入后的节点
"""
if not node:
# 如果当前节点为空,则创建一个新节点作为叶节点
return BiTreeNode(val)
elif val < node.data:
# 如果要插入的值小于当前节点的值,则递归插入到左子树
node.lchild = self.insert(node.lchild, val)
node.lchild.parent = node # 更新左子节点的父节点
elif val > node.data:
# 如果要插入的值大于当前节点的值,则递归插入到右子树
node.rchild = self.insert(node.rchild, val)
node.rchild.parent = node # 更新右子节点的父节点
# 如果要插入的值等于当前节点的值,则不做任何操作(BST中不允许重复值)
return node
def insert_no_rec(self, val):
"""
非递归插入节点到二叉搜索树中
:pa