理解二叉搜索树
概念与性质
二叉搜索树(Binary Search Tree, BST)又称二叉排序树。它或者是一棵空树,或者满足以下性质的二叉树:
- 若左子树不为空,则左子树上所有结点的值都小于等于根结点的值;
- 若右子树不为空,则右子树上所有结点的值都大于等于根结点的值;
- 左右子树也分别为二叉搜索树。
注意:具体实现中,可以支持插入相等值(如 multiset),也可以不支持(如 set)。本教程以不支持重复键值为例进行讲解。

核心特性
BST 支持动态数据集合的高效操作,适合频繁插入、删除和查找的场景。利用二叉树的分支特性,在平均情况下能实现 O(log n) 的搜索效率。

性能分析
时间复杂度
- 最优情况:树为完全二叉树或接近完全二叉树,高度约为 log N,增删查改时间复杂度为 O(log N)。
- 最差情况:树退化为单支树(类似链表),高度为 N,时间复杂度降为 O(N)。

因此,实际应用中常需引入平衡机制(如 AVL 树、红黑树)来保证性能。
与二分查找对比
二分查找虽也能达到 O(log N),但存在局限:
- 需要支持下标随机访问的结构且有序;
- 插入和删除效率低,因为涉及大量数据移动。

实现定义
节点结构
template<class K>
struct BSTreeNode {
BSTreeNode<K>* _left;
BSTreeNode<K>* _right;
K _key;
BSTreeNode(const K& key)
: _left(), _right(), _key(key) {}
};


