前言
二叉搜索树(Binary Search Tree, BST)是一种特殊的二叉树,其核心特性是:左子树所有节点的值小于根节点,右子树所有节点的值大于根节点。它以 O(log n) 的平均时间复杂度进行查找、插入和删除操作。
本文将以 C++ 为工具,详细讲解二叉搜索树的三个本质操作:
- 插入:节点路径的抉择
- 查找:数据的定位
- 删除:结构的重组与维护
1. 准备工作
1.1 节点定义
链式结构的树由节点构成。二叉搜索树需要定义节点结构,包含键值及左右子节点指针。
template<class K> struct BSTNode {
K _key; // 节点存放的值
BSTNode<K>* _left; // 左节点
BSTNode<K>* _right; // 右节点
BSTNode(const K& key)
:_key(key), _left(nullptr), _right(nullptr) {}
};
1.2 类框架搭建
二叉搜索树类仅需存放根节点。
template<class K> class BSTree {
typedef BSTNode<K> Node;
private:
Node* _root; // 根节点指针
};
2. 二叉搜索树的插入
bool Insert(const K& key);
2.1 逻辑讲解
插入逻辑遵循'小左大右'原则:
- 若树为空,新节点作为根节点。
- 若树非空,从根节点开始遍历:
- 若插入值小于当前节点,向左走;
- 若插入值大于当前节点,向右走;
- 直到找到空位置插入。
- 若值相等,通常视为重复数据,不插入(可根据需求调整)。
2.2 代码实现
需记录父节点以便建立连接。
if (_root == nullptr) {
_root = (key);
;
}
Node* parent = ;
Node* cur = _root;
(cur) {
(key < cur->_key) {
parent = cur;
cur = cur->_left;
} (key > cur->_key) {
parent = cur;
cur = cur->_right;
} {
;
}
}
cur = (key);
(key > parent->_key) {
parent->_right = cur;
} {
parent->_left = cur;
}
;


