平衡二叉树和二叉排序树之间有什么关系

发布时间:2020-07-29 16:37:23 作者:Leah
来源:亿速云 阅读:513

本篇文章给大家分享的是有关平衡二叉树和二叉排序树之间有什么关系,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

平衡二叉树和二叉排序树并没有直接的关系,但是二叉排序树的查找效率与二叉树的形态有关,所有当我们希望二叉排序树的形态是均匀的时候,这样的二叉树就被称为平衡二叉树。

1. 二叉排序树

二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树

二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:

  1. 若左子树不空,则左子树上所有节点的值均小于它的根节点的值;
  2. 若右子树不空,则右子树上所有节点的值均大于它的根节点的值;
  3. 左、右子树也分别为二叉排序树。

如图下图所示就是一棵二叉排序树:
平衡二叉树和二叉排序树之间有什么关系
对二叉排序树进行中序遍历,便可得到一个按关键字排序的序列,如对上图进行一次中序遍历可得到一个有序序列:10,42,45,55,58,63,67,70,83,90,98

就查找的平均时间性能而言,二叉排序树上的查找与折半查找类似,但就维护表的有序性而言,二叉排序树更高效,因为它无需移动节点,只需修改指针即可完成二叉排序树的插入和删除操作。

二叉排序树查找在在最坏的情况下,需要的查找时间取决于树的深度

  1. 当二叉排序树接近于满二叉树时,其深度为log2n ,因此最坏情况下的查找时间为O(log2n),与折半查找是同数量级的。
  2. 当二叉树如下图所示形成单枝树时,其深度为n,最坏情况下查找时间为O(n),与顺序查找属于同一数量级。
    平衡二叉树和二叉排序树之间有什么关系
    所以为了保证二叉排序树查找有较高的查找速度,希望该二叉树接近于满二叉树,或者二叉树的每一个节点的左、右子树深度尽量相等

2. 平衡二叉树

通过上面的分析可知,二叉排序树的查找效率与二叉树的形态有关,我们希望二叉排序树的形态是均匀的,这样的二叉树称为平衡二叉树。

  1. 它的左右两个子树的深度差的绝对值不超过1;
  2. 它的左右两个子树也分别是平衡二叉树。

将二叉树节点的左子树的深度减去它的右子树的深度称为平衡因子BF,则平衡二叉树上所有节点的平衡因子只可能是-1、0和1,如下图左边的为平衡二叉树,右边的为非平衡二叉树。
平衡二叉树和二叉排序树之间有什么关系
因为平衡二叉树上任何节点的左、右子树的深度之差都不会超过1,可以证明它的深度和n个节点的完全二叉树的深度log2n+1是同数量级的。因此,它的平均查找次数也是和log2n+1同数量级的。

要构造一棵平衡二叉树,Georgii M. Adelson-Velskii 和 Evgenii M. Landis 提出了一种动态保持二叉平衡树的方法,其基本思想是:在构造二叉排序树的时候,每当插入一个节点时,先检查是否因插入节点而破坏了树的平衡性,如果是,则找出其中最小不平衡子树,在保持排序树的前提下,调整最小不平衡子树中各节点之间的连接关系,以达到新的平衡,所以这样的平衡二叉树简称AVL树。其中最小平衡子树是指:离插入节点最近,且平衡因子绝对值大于1的节点作为根节点的子树

  1. 单向右旋(LL型): 插入位置为左子树的左子树,以左子树为轴心,进行单次向右旋转,如下图所示。节点旁边的数字为该节点的平衡因子,I节点为当前插入节点(如果I节点处于正中,则表示I节点既可以是左孩子也可以是右孩子。

注意LL型,以中间节点为轴心进行旋转。为什么这里I为BL左孩子不能将B-BL-I作为LL型,是因为A节点才是离I节点最近的平衡因子绝对值>1的子树,其余节点的平衡因子绝对值都没有超过1;同理当I为BL右孩子,也不能将B-BL-I作为LR型
平衡二叉树和二叉排序树之间有什么关系
2. 单向左旋(RR型): 插入位置为右子树的右子树,右子树为轴心,进行单次向左旋转

注意RR型,以中间节点为轴心进行旋转。这里I为左右子树并不影响其实RR型,原理同上。
平衡二叉树和二叉排序树之间有什么关系
3. 双向旋转先左后右(LR型):插入位置为左子树的右子树,要进行两次旋转,先向左旋转,再向右旋转。

插入节点为左孩子:注意为什么不能B-C-I作为子树将其定为RL型,原理同RR型中的解释,对于LR型,,是以R端或者L靠近插入节点端作为旋转轴心(如下图相当于先旋转以B为根的子树后,成为了LL型,再旋转以A为根的子树)。
平衡二叉树和二叉排序树之间有什么关系
插入节点为右孩子:
平衡二叉树和二叉排序树之间有什么关系
4. 双向旋转先右后左(RL型):插入位置为右子树的左子树,进行两次调整,先右旋转再左旋转;处理情况与LR类似。

插入节点为左孩子:
平衡二叉树和二叉排序树之间有什么关系
插入节点为右孩子:
平衡二叉树和二叉排序树之间有什么关系

经过上面的我们可以发现,平衡因子与类型有很大的关系,需要以离插入节点最近且平衡因子绝对值>1的节点作为根节点的子树进行判定是哪种类型

如下图所示,先插入节点2后,成为LL型,然后整体右旋处理后平衡。
平衡二叉树和二叉排序树之间有什么关系
再依次插入8和6之后,节点5的平衡因子绝对值>1,成为RL型,所以先以5为根节点,将其子树8-6右旋(成为RR型),然后将5为根节点的整棵树再左旋。
平衡二叉树和二叉排序树之间有什么关系
继续插入节点9后,节点4的平衡因子>1,成为RR型,所以以4为根节点,将整体左旋。
平衡二叉树和二叉排序树之间有什么关系

undefined

以上就是平衡二叉树和二叉排序树之间有什么关系,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

推荐阅读:
  1. UNIX和Linux之间有什么关系?
  2. java类和接口之间有什么关系?区别是什么?

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

平衡二叉排序树 二叉排序树 二叉排

上一篇:在CentOS 8上安装Docker CE

下一篇:二叉搜索树有哪些实现方式

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》