用C++实现二叉搜索树:插入、查找、删除与key/value场景
二叉搜索树(BST)是数据结构里比较基础但也容易踩坑的一个。简单说,它要么是空树,要么满足:左子树所有节点的值都小于等于根,右子树所有节点的值都大于等于根,并且左右子树各自也是BST。相等值怎么处理看具体场景——像std::set不允许重复,std::multiset则可以。

为什么不用二分查找?
二分查找在有序数组里能做到O(logN)的查找,但插入和删除就慢多了,因为要移动大量元素。BST正好弥补了这点,它不需要连续存储,插入删除可以更高效。当然,最坏情况下它会退化成链表,查找变成O(N),所以后来有了AVL、红黑树这些平衡树来保证logN。但理解最朴素的BST,是后头那些复杂结构的起点。

插入
插入的逻辑很直接:从根开始,比当前节点小就往左,大就往右,直到找到空位置,然后把新节点挂上去。如果允许重复值,可以选择统一往左或往右。下面这个数组
int a[] = {8, 3, 1, 10, 6, 4, 7, 14, 13};
插入后结构如下:

再插入16和13(允许多重时),树变成这样:





