二叉查找树增删查简介

简介: 二叉查找树增删查简介

二叉查找树作为一个基本的数据结构,与二分法的线性查找有相似之处。

二叉查找树:若其左子树存在,则其左子树中每个节点的值都不大于该节点值;

若其右子树存在,则其右子树中每个节点的值都不小于该节点值。

一个二叉查找树的图例如下:

查找

假如该二叉树是一个满二叉树的话,那么共有15个节点,树的高度是4,最多查找4次就可以找到树中任意一个值。可以得到: 15 = 2^4 -1;

归纳为,如果有N个节点的满二叉树的话,查找次数为log2(N+1)次,那么查找复杂度就是log2N。


假如每个二叉树每个节点只有一个子树的话,那么该二叉树相当于线性结构,有N个节点,最多要查询N次才能找到树中任意一个值。查找复杂度就是N。


所以二叉查找树的查找复杂度介于Log2N和N之间。

插入

当一个二叉查找树要插入一个节点的时候,其实和查找的过程类似,查找是遍历二叉树找到相等的值,插入是遍历二叉树找到其父节点,如果子节点有空缺,那么就把值插入,如果已存在就插入失败。

以上图为例:假如要插入一个值为4 的节点。和6比去左边,和3比去右边,和5比去左边,但是5是叶子节点,没有子节点了,所以4的节点要插入在5的左边。 所以插入的复杂度和查询是一致的。

删除

删除稍微麻烦一点:

待删除节点的子节点为0:直接删掉。不影响二叉树的结构定义。

待删除节点的子节点为1:将待删除节点的子节点(不论左右)上移到待删除节点的位置。

待删除节点的子节点为2:找到待删除的节点的左子树的最大值或右子树的最小值。替换掉待删除节点的位置即可。这个画图举例下,原图如下:

20201013171041252.png

搞得极端一点,直接删除根节点。也就是值为50的节点,按照上述删除方式执行,结果有二,如下:

如果是找到待删除的节点的左子树的最大值并替换待删除节点的话,50的左子树的最大值是40,40替换原50的位置,整个二叉树仍然符合二叉查找书的结构规则。

20201013172144163.png

或者是找到待删除的节点的右子树的最小值并替换待删除节点的话,50的右子树的最小值是75,75替换原50的位置,整个二叉树仍然符合二叉查找书的结构规则。

20201013172242302.png

目录
相关文章
|
4月前
|
存储 关系型数据库 MySQL
如何理解Mysql的索引及他们的原理--------二叉查找树和平衡二叉树和B树和B+树
如何理解Mysql的索引及他们的原理--------二叉查找树和平衡二叉树和B树和B+树
|
5月前
|
存储 数据库 索引
B树和B+树的插入、删除图文详解
B树和B+树的插入、删除图文详解
75 0
|
6月前
|
存储 关系型数据库 数据库
数据库索引的原理,为什么要用 B+树,为什么不用二叉树?
数据库索引的原理,为什么要用 B+树,为什么不用二叉树?
|
存储 算法
【查找算法】二叉排序树查找法
【查找算法】二叉排序树查找法
算法训练Day22|235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点
算法训练Day22|235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点
|
存储 Java 程序员
Java开发 - 树(二叉树,二叉排序树,红黑树)(一)
Java开发 - 树(二叉树,二叉排序树,红黑树)
149 0
Java开发 - 树(二叉树,二叉排序树,红黑树)(一)
|
算法 Java
Java开发 - 树(二叉树,二叉排序树,红黑树)(三)
Java开发 - 树(二叉树,二叉排序树,红黑树)
110 0
 Java开发 - 树(二叉树,二叉排序树,红黑树)(三)
|
Java
Java开发 - 树(二叉树,二叉排序树,红黑树)(二)
Java开发 - 树(二叉树,二叉排序树,红黑树)
99 0
 Java开发 - 树(二叉树,二叉排序树,红黑树)(二)
树的预备知识,基本术语,顺序查找(哨兵)和二分查找
树的预备知识,基本术语,顺序查找(哨兵)和二分查找