BST是一种二叉树。若它的左子树不为空,则左子树上的所有节点的值均小于根节点的值;若它的右子树不为空,则右子树上的所有节点的值均大于根节点的值;左右子树又各一棵二叉排序树;没有键值相等的节点。
查找
BST的查找从根节点开始,沿着某一个分支逐层向下比较。先和根节点比较,如果大于根节点值在右子树继续查找,小于根节点值在左子树查找。
以下代码实现全部使用递归的方式。
插入
从根节点开始,如果即将插入的值小于节点的值,往左子树递归查找;如果大于节点的值,往右子树递归查找。直到找到空节点时,插入数据
遍历
数据结构——二叉树文章中已经描述,这里不在赘述。
查找小于等于指定值V的最大值(前驱)
如果给定的值v小于根节点的值,那么查找的值肯定在二叉树的左侧;如果给定的值v等于根节点的值,根节点就是要找的值;如果给定的值v大于根节点的值,那么只有当根节点的右子树中存在小于等于给定值v的节点时,查找的值才会出现在右子树,否则就是根节点。
查找大于等于指定值V的最小值(后继)
如果给定的值v大于根节点的值,那么要查找的值肯定在根节点的右子树;如果给定的值v等于根节点的值,那么要查找的值就是根节点的值;如果给定的值v小于根节点的值,那么当且仅当根节点的左子树中存在大于等于给定值v的节点时,才会出现在左子树中,否则就是根节点。
删除指定节点
如果被删节点z是叶子节点,则直接删除;若节点z只有一颗左子树或右子树,则让z的子树成为z父节点的子树,替代z的位置;若节点z有左、右两棵树,取出节点z右子树的最小节点替换当前节点。
至此,二叉查找树的操作实现完成,大家可以自行编写测试代码,体验一把。由于文章不允许插入代码格式的脚本,需要源码的同学可以私信找小编获取。