二叉搜索树概念
二叉搜索树(Binary Search Tree, BST)又称二叉排序树。它要么是一棵空树,要么满足以下性质:
- 若左子树不为空,则左子树上所有结点的值都小于等于根结点的值
- 若右子树不为空,则右子树上所有结点的值都大于等于根结点的值
- 左右子树也分别为二叉搜索树
需要注意的是,二叉搜索树是否支持插入相等值取决于具体场景定义。例如 STL 中的 map/set 不支持插入相等值,而 multimap/multiset 支持。

性能分析
在最优情况下,二叉搜索树接近完全二叉树,高度为 log₂N;最差情况下退化为单支树,高度为 N。因此,综合时间复杂度为 O(N)。
单纯的二叉搜索树效率有时无法满足要求,这也是后续平衡搜索二叉树(如 AVLTree、红黑树 RBTree)出现的原因,它们通过特殊设计将效率稳定在 log₂N 级别。
既然有了时间复杂度为 logN 的二分查找算法,为什么还需要二叉搜索树?
二分查找的缺陷:
- 需要存储在支持下标随机访问的结构中,且必须有序(如有序数组)
- 插入和删除数据效率低,因为需要挪动大量数据
正是这些缺陷体现了二叉搜索树的价值。

插入操作
插入过程遵循二叉搜索树的性质:
- 树为空,直接新增结点作为根
- 树不空,比较当前结点值:
- 插入值比当前结点大,往右走
- 插入值比当前结点小,往左走
- 找到空位置,插入新结点
如果支持插入相等值,逻辑需保持一致(例如始终往右或始终往左)。
int a[] = {8, 3, 1, 10, 6, 4, 7, 14, 13};
插入 16 和 13 后的结构变化如下:




