什么是二叉搜索树
二叉搜索树(Binary Search Tree,简称 BST),也叫二叉排序树或二叉查找树。它是一棵特殊的二叉树,满足以下性质:
- 若左子树不为空,则左子树上所有节点的值均小于根节点的值。
- 若右子树不为空,则右子树上所有节点的值均大于根节点的值。
- 左右子树也分别为二叉搜索树。
- 空树也是二叉搜索树。
简单来说,就是对于任意节点,左小右大。这棵树的结构决定了它的查找效率。

性能分析
BST 的性能高度依赖于树的形态。
最优情况:当树接近完全二叉树时,高度最小,约为 log₂N。此时查找、插入、删除的时间复杂度均为 O(log₂N)。

最坏情况:如果数据是有序插入的,树会退化成链表,高度变为 N。此时操作退化为线性查找,时间复杂度为 O(N)。

这也是为什么后续我们会引入 AVL 树或红黑树来保持平衡的原因。
具体实现
基本结构
为了支持不同的数据类型,我们使用模板定义节点和树。
template<class K> struct BSTNode {
BSTNode(const K& key) :_left(nullptr), _right(nullptr), _key(key) {}
BSTNode<K>* _left;
BSTNode<K>* _right;
K _key;
};
template<class K> class BSTree {
typedef BSTNode<K> Node;
public:
// ... 成员函数
private:
Node* _root = nullptr;
};


