C++ 二叉搜索树:原理与增删查实现详解
二叉搜索树(Binary Search Tree, BST)是数据结构中非常基础且重要的一种树形结构。它之所以被广泛使用,核心在于其独特的排序性质,这使得查找、插入和删除操作在平衡状态下能保持较高的效率。
1. 二叉搜索树相关概念
一棵二叉搜索树必须满足以下两个条件:
- 若左子树不空,则左子树上所有节点的值均小于根节点的值。
- 若右子树不空,则右子树上所有节点的值均大于根节点的值。
- 左右子树也分别为二叉搜索树。
简单来说,就是对于任意节点,左 < 根 < 右。下图展示了一个合法的二叉搜索树示例:

而下图就不满足定义,因为存在节点值违反大小关系的情况:

2. 二叉搜索树的操作
我们将二叉搜索树封装为一个类 BSTree,并声明一个 _root 变量指向树的根节点。
// 节点模板
template<class K>
struct BSTNode {
BSTNode<K>* _left;
BSTNode<K>* _right;
K _key;
BSTNode(const K& val) : _left(nullptr), _right(nullptr), _key(val) {}
};
// 二叉搜索树类
template<class K>
class BSTree {
public:
typedef BSTNode<K> Node;
private:
Node* _root;
};
2.1. 查找节点
查找逻辑其实和二分查找很像。给定目标值 val,从根节点出发,循环比较当前节点值与 val 的大小:
- 若
val < cur->_key,说明目标在左子树,向左走。 - 若
val > cur->_key,说明目标在右子树,向右走。 - 若相等,则找到目标,返回该节点。
当树平衡时,时间复杂度为 O(log n)。如果树退化成链表,则是 O(n)。


