二叉排序树(BST)、平衡二叉树(AVL)、B-树、B+树

目录

一、二叉排序树

       1.二叉排序树(BST)定义

       2.二叉排序树的操作

二、平衡二叉树(AVL)

       1.平衡二叉树的定义

       2.平衡二叉树的建立

       3.平衡调整

       4.平衡二叉树实现的实例

三、B-树(B树)

       1.为什么会出现B树

       2. B树的基本概念

       3. B树的基本操作

四、B+树

五、总结

       1. 二叉搜索树、 B(B-)树、B+树

      2. B树和B+树的区别


一、二叉排序树

       1.二叉排序树(BST)定义

       二叉排序树(BST),又叫二叉查找树,亦称二叉搜索树,它或者是一颗空树,或者是具有以下性质的二叉树:

       1)若它的左子树不空,则左子树上所有关键字的值均小于根关键字的值;

       2)若它的右子树不空,则右子树上所有关键字的值均大于根关键字的值;

       3)左右子树又各是一颗二叉排序树;

       注:由二叉排序树的定义可知,如果输出二叉排序树的中序遍历序列,则这个序列是递增有序的。

       2.二叉排序树的操作

      (1)插入

      插入过程比较简单,首先判断当前要插入的值是否已经存在于二叉排序树中,如果已经存在,则直接返回;如果不存在,则找到适当的位置,将其插入。注意插入的新节点一定是叶子节点;

插入过程示例

       (2)删除

       当在二叉排序树中删除一个关键字时,不能把以该关键字所在的结点为根的子树都删除,而是只删除这一个结点,并保持二叉树的特性。

       假设在二叉排序树上被删除结点为p,f为其双亲结点,则删除结点p的过程分为以下3种情况:

       ①p结点为叶子结点。——直接删除

       ②p结点只有右子树而无左子树,或者只有左子树而无右子树。——将p删掉,然后将p的子树直接接在原来p与其双亲结点f相连的指针上即可。

       ③p结点既有左子树又有右子树。——具体做法为:先沿着p的左子树根节点的右指针一直往右走,直到来到其右子树最右边的一个结点r(也可以沿着p的右子树根结点的左指针一直往左走,直到来到左子树最左边的一个结点)。然后将p中关键字用r中的关键字代替。最后判断,如果r是叶子结点,则按照①中方法删除r;如果r是非叶子结点,则按照②中的方法删除r。

91d3c906257ff36fbce18a7b74296a2ee29.jpg
被删结点p只有左子树或只有右子树的情况
被删结点p左右子树均不为空的情况

       (3)查询

       查询过程比较简单,首先将关键字和根节点的关键字比较,如果相等则返回节点的位置(指针);否则,如果小于根节点的关键字,则去左子树中继续查找;如果大于根节点的关键字,则去右子树中查找;如果找到叶子节点也没找到,则返回NULL。

       查询过程的最好情况就是节点在左右子树中分布比较均匀,此时查找的时间复杂度为O(logn);最坏的情况就是在建立二叉排序树时,输入的关键字序列正好是有序的,此时形成的二叉排序树是一棵单支二叉树,此时查找退化成了单链表的查找,时间的复杂度为O(n).如下图:

二、平衡二叉树(AVL)

       1.平衡二叉树的定义

       平衡二叉树又称AVL(G.M. Adelson-Velsky 和 E.M. Landis)树,是一种特殊的二叉排序树。其左右子树都是平衡二叉树,且左右子树高度之差的绝对值不超过1。一句话表述为:以树中所有结点为根的树的左右子树高度之差的绝对值不超过1。

       注意:平衡二叉树首先是二叉排序树。原因是有人先发明了二叉排序树,实现了较高的查找效率。后来发现基于这种查找方法,树越矮查找效率越高,进而发明了平衡二叉树。平衡二叉树是二叉排序树的改进,因此它是二叉排序树。

       为了判断一棵子二叉排序树是否为平衡二叉树,引进了平衡因子的概念。平衡因子是针对树中的结点来说的,一个结点的平衡因子为其左子树的高度减去其右子树高度的差。对于平衡二叉树,树中的所有结点的平衡因子的取值只能是-1,0,1。

       2.平衡二叉树的建立

       建立平衡二叉树的过程和建立二叉排序树的过程是基本一样的,都是把关键字插入空树中的过程。所不同的是,在建立平衡二叉树的过程中,每插入一个新的关键字都要进行检查,看是否新关键字的插入会使的原平衡二叉树失去平衡,即树中出现平衡因子绝对值大于1的结点。如果失去平衡需要进行平衡调整

       3.平衡调整

       假定向平衡二叉树中插入一个新的结点后破坏了平衡二叉树的平衡性,则首先要找出插入新节点后失去平衡的最小子树,然后再调整这棵子树,使之成为平衡子树。值得注意的是,当失去平衡的最小子树被调整为平衡子树后,无须调整原有其他所有的不平衡子树,整个二叉排序树就会成为一棵平衡二叉树。所谓失去平衡的最小子树是以距离插入结点最近,且以平衡因子绝对值大于1的结点作为根的子树,又称为最小不平衡子树。

       平衡调整有四种情况&#

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值