介绍
二叉搜索树(Binary Search Tree,简称BST)是一种常用的数据结构,其特点在于每个节点的值大于其左子树中任意节点的值,小于其右子树中任意节点的值。这种性质使得在BST中进行搜索、插入和删除等操作非常高效。
在本文中,我们将通过Python代码实现BST及其基本操作,包括节点的插入、查询、删除以及不同遍历方式的演示。
节点定义
首先,我们定义了二叉搜索树的节点类 BiTreeNode
。每个节点包含数据、左孩子、右孩子和父节点。
class BiTreeNode:
def __init__(self, data):
# 节点初始化,包括数据、左孩子、右孩子和父节点
self.data = data
self.lchild = None
self.rchild = None
self.parent = None
二叉搜索树的实现
接下来,我们实现了二叉搜索树类 BST
,包括树的初始化、节点的插入、查询和删除,以及不同遍历方式的实现。
class BST:
def __init__(self, li=None):
# 二叉搜索树初始化,根节点默认为空
self.root = None
if li:
# 如果提供了列表,则通过非递归插入构建二叉搜索树
for val in li:
self.insert_no_rec(val)
def insert(self, node, val):
"""
递归插入节点。
参数:
node (BitreeNode): 当前节点。
val: 要插入的值。
返回:
BitreeNode: 插入后的节点。
"""
if not node:
# 如果当前节点为空,则创建新节点
node = 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
return node
def insert_no_rec(self, val):
"&#