平衡二叉树

来源:互联网 发布:淘宝鞋店排行榜 编辑:程序博客网 时间:2024/05/17 08:22

定义

二叉树的查询速度取决于树的结构,树的深度越小查找的平均速度就越小,因此希望二叉树的高度尽可能小。前苏联科学家Adelson-Velskii和Landis(这里还是把名字打出来了,哈哈,是希望以后能看到我们中国人的名字)提出平衡二叉树,又称AVL树。

平衡二叉树:左右子树的深度之差绝对值不超过1,左右子树也是平衡二叉树。

平衡因子:节点左右子数深度差值。如下:

不平衡二叉树
不平衡二叉树
平衡二叉树
平衡二叉树

平衡二叉树的平衡调整方法

具体例子,假如有关键字序列为(13,24,37,90,53),下面为构造平衡树的具体方法:

第一步:以序列的第一个数为根节点

这里写图片描述

第二步:
这里写图片描述

第三步:已经出现不平衡了,将在下步进行调整
这里写图片描述

第四步:调整
这里写图片描述

第五步:继续添加,又出现不平衡了,将在下步进行调整
这里写图片描述

剧终
这里写图片描述

是不是觉得蛮简单的,当出现不平衡时就以出现不平衡因子及它的子节点为子树进行调整,把中间的值作为子树的新根其他作为左右子节点就行了。

那么上面那个平衡二叉树加入关键字为91的节点,该怎弄?是不是觉得不容易调整了?

一般情况下可以归纳为4种情况

都直接上具体例子

  • RR型
    这里写图片描述

这时只需要向左的一次逆时针旋转就行

这里写图片描述

就是把右边节点移到上面去,如果出现三叉就作为根节点左边下面一个节点的右节点。

  • LL型
    这里写图片描述

这时只需要向右的一次顺时针旋转就行

这里写图片描述

就是把左边节点移到上面去,如果出现三叉就作为根节点右边下面一个节点的左节点。

  • LR型
    (1)LR(0)型
    这里写图片描述

直接把中间值放中间就好

(2)LRL型
这里写图片描述

分离出RL型子树让现在子树根节点A的右节点B,作为根节点,B原来的左节点作为A的右节点,原来分离的另一部分作为现在根节点的右子树,结果如下

这里写图片描述

(3)LRR型
这里写图片描述

调整之后
这里写图片描述

  • RL型
    和LR类似不再赘述
原创粉丝点击