二叉查找树(Binary Search Tree),也称二叉搜索树,是指一棵空树或者具备下列性质的二叉树:算法
- 任意节点的左子树不空,则左子树上全部结点的值均小于它的根结点的值;
- 任意节点的右子树不空,则右子树上全部结点的值均大于它的根结点的值;
- 任意节点的左、右子树也分别为二叉查找树;
- 没有键值相等的节点。
二叉查找树相比于其余数据结构的优点在于查找、插入的时间复杂度较低。为O(log n)。二叉查找树是基础性数据结构,用于构建更为抽象的数据结构,如集合、multiset、关联数组等。(摘自维基百科)数组
下面 4 张 GIF 动图,是 penjee 官博制做分享。,分享给你们。数据结构
图1:查找 BST 中的某个元素
在二叉搜索树b中查找x的过程为:spa
- 若b是空树,则搜索失败,不然:
- 若x等于b的根节点的数据域之值,则查找成功;不然:
- 若x小于b的根节点的数据域之值,则搜索左子树;不然:
- 查找右子树。

图2 ↓ :从有序数组构造一个二叉查找树

图3 ↓:往 BST 中插入元素
向一个二叉搜索树b中插入一个节点s的算法,过程为:3d
- 若b是空树,则将s所指结点做为根节点插入,不然:
- 若s->data等于b的根节点的数据域之值,则返回,不然:
- 若s->data小于b的根节点的数据域之值,则把s所指节点插入到左子树中,不然:
- 把s所指节点插入到右子树中。(新插入节点老是叶子节点)

图4 ↓:BST 转成有序数组
