AVL树插入旋转回顾详细

摘要

AVL树插入时可能会导致失衡,找到最先失衡的子树。再根据插入方式找到三个节点(姑且称之为失衡节点)。最后找到三个失衡节点中val值在中间的失衡节点并将其旋转到失衡节点顶部即可(旋转中需要保持搜索树的性质)。

AVL树

本文只是简单介绍一下AVL树(自平衡二叉查找树)(因为看HashMap源码需要用到红黑树,学习红黑树之前先复习一下AVL树)(本文不适合初学者,只是帮助回忆)

特点:
​1.二叉搜索树。
2.平衡:每个结点的左右子树的高度之差的绝对值(平衡因子)最多为1。
插入:
​ 插入节点时可能会导致平衡因子大于1(不平衡),此时,需要进行旋转重新回到平衡状态,根据插入节点位置的不同,旋转方式分为四种:

​	0.插入节点导致的第一个平衡因子大于1的节点为node

​	a.插入节点在node的左子树的左子树:LL

​      /   ---->     /\      1<-2<-3  ---->   1<-2->3

​	/     ---->    只需将2转到3的位置: 右旋

​	b.插入节点在node的右子树的右子树:RR

​	\     ---->     /\        1->2->3 ---->  1<-2->3 

​	  \   ---->	同理,将2转到1的位置:左旋

​	c.插入节点在node的左子树的右子树:LR

​	  /3   ----> /\     目的是将三个节点(1,2,3)大小的中间值,转到树的顶部。需要注意的是,

​	 1				  过程中需要保持搜索二叉树的性质(左孩子小,右孩子大于自己),对于左边这棵

​	   \2		       树,只需:①将2移到中间,②将2移到顶部即可。①时因为2大于1所以,1是2的					  		   
					 左子树,所以旋转操作是左旋,②时因为3大于2,3是2的右子树,所以旋转操作
					 是右旋

​	d.插入节点在node的右子树的左子树:RL

​	1\    ---->/\       同理,将大小的中间值,移到树的顶部

​	  3				 先右旋,后左旋(这么旋既能将2移到顶部,也能在旋转过程中保持搜索树的性质)

​    2/

插入总结:插入时可能会导致失衡,找到最先失衡的子树。再根据插入方式找到三个节点(姑且称之为失衡节点)。最后找到三个失衡节点中val值在中间的失衡节点并将其旋转到失衡节点顶部即可(旋转中需要保持搜索树的性质)。

删除:

删除动作等于:二叉搜索树删除+维护平衡(👆旋转)

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值