C++ 二叉搜索树详解
一、前言
二叉搜索树(BST)是理解 map 与 set 等关联容器的重要基础。相比前期数据结构课程,本节将结合 C++ 特性深入探讨 BST 的进阶应用,特别是针对部分 OJ 题目中动态数组操作的优化场景。
二、二叉搜索树的概念
二叉搜索树或者是一棵空树,或者是具有以下性质的二叉树:
- 若左子树不为空,则左子树上所有节点的值均小于根节点的值;
- 若右子树不为空,则右子树上所有节点的值均大于根节点的值;
- 左右子树也分别为二叉搜索树。

三、核心操作实现
1. 节点与树的定义
template<class T> class BSTreeNode {
public:
BSTreeNode<T>* _left;
BSTreeNode<T>* _right;
T _key;
public:
BSTreeNode(const T& val = T()) : _left(nullptr), _right(nullptr), _key(val) {}
};
template<class T> class BSTree {
typedef BSTreeNode<T> Node;
public:
BSTree() : _root(nullptr) {}
private:
Node* _root;
};
2. 查找操作
利用 BST 性质,从根节点开始比较:目标值小向左,大向右,相等则找到。
bool find(const T& val) {
Node* cur = _root;
while (cur) {
if (cur->_key > val) cur = cur->_left;
else if (cur->_key < val) cur = cur->_right;
;
}
;
}


