6.4平衡二叉树(AVL树)

6.4平衡二叉树(AVL树)

二叉排序树的形状住要时高度不一样的时候性能差距很大,为了避免二叉排序树由于高度增长过快导致性能降低,所以我们需要对二叉排序树做出一定的限制。

平衡二叉树:是特殊的二叉排序树,特殊的地方在于左右子树的高度差绝对值不超过一,而且左右子树又是一颗平衡二叉树。(每个结点的平衡因子只能为1,0,-1)

平衡因子:定义结点左子树和右子树的高度差为该结点的平衡因子。

[外链图片转存失败(img-AwzZhlyt-1567147512850)(C:\Users\liuhao\AppData\Roaming\Typora\typora-user-images\1567144154335.png)]

平衡二叉树的建立过程和二叉排序树的建立过程时相似的,都是从一棵空树开始陆续插入结点。不同的地方在于对于平衡二叉树的建立过程中,插入结点可能会破坏结点的平衡性,所以需要平衡调整。

最小不平衡二叉树:以距离插入结点最近的,平衡因子绝对值大于1的结点为根的子树称为最小不平衡子树

[外链图片转存失败(img-Jl06iRTC-1567147512851)(C:\Users\liuhao\AppData\Roaming\Typora\typora-user-images\1567144607873.png)]

不平衡原因:

[外链图片转存失败(img-cWc6rffN-1567147512852)(assets/1567144680143.png)]

解决办法:

[外链图片转存失败(img-x7MLOQKv-1567147512852)(assets/1567144732278.png)]

[外链图片转存失败(img-xRqLVrGb-1567147512853)(assets/1567144742941.png)]

RL LR 解决办法(最小不平衡子树根结点的平衡因子为-2<0他的孩子结点平衡因子为1>0):先将孩子结点的平衡因子转换成和根结点正负一致,在进行调整。

举例:

[外链图片转存失败(img-8OjgDptw-1567147512853)(assets/1567145022313.png)]

[外链图片转存失败(img-OHNJQPvg-1567147512854)(assets/1567145050956.png)]

[外链图片转存失败(img-Dsk6zmj2-1567147512855)(assets/1567145074278.png)]

自己就是最小平衡子树,由于插入15导致不平衡,时根结点的左孩子的左子树导致,所以进行LL调整。

根结点的平衡因子为正数,所以进行右旋

[外链图片转存失败(img-Y0zNjve4-1567147512855)(assets/1567145245464.png)]

[外链图片转存失败(img-xjP74QoI-1567147512856)(assets/1567145262549.png)]

[外链图片转存失败(img-0dpgSeVf-1567147512856)(assets/1567145296039.png)]

由于插入115导致34这个结点的不平衡,115时34的右孩子的右子树,所以时RR调整。

[外链图片转存失败(img-Lde1yj6e-1567147512856)(assets/1567145411768.png)]

[外链图片转存失败(img-vgDQxROJ-1567147512857)(assets/1567145426171.png)]

由于插入28号导致23这个结点不平衡,28是23的右孩子的左子树,所以是RL调整。这时需要两步完成。

1)先把平衡因子绝对值超出1的结点的右子树根结点的平衡因子换成负值,这道题中就是把以98为根结点的子树右旋

[外链图片转存失败(img-XegMGyGr-1567147512857)(assets/1567145760398.png)]

2)此时最小不平衡子树的跟结点的的平衡因子为-2,右孩子是-1,变成了RR情况,所以以孩子结点34进行左旋

[外链图片转存失败(img-qyWIBbDt-1567147512858)(assets/1567146084018.png)]

[外链图片转存失败(img-bm61A8yv-1567147512858)(assets/1567146121095.png)]

RL调整:

1)最小不平衡子树的跟结点右孩子为根结点的子树右旋

[外链图片转存失败(img-wjKx4WzX-1567147512859)(assets/1567146292305.png)]

2) 左旋:

[外链图片转存失败(img-REp2v9Lu-1567147512860)(assets/1567146348750.png)]
时间复杂度:

含有n个结点平衡二叉树的最大深度为O(Log2n),因此,平衡而二叉树的平均查找长度为O(Log2n)。

结论:

[外链图片转存失败(img-DEKeGl5B-1567147512860)(assets/1567147291827.png)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值