考研网上

Java完成AVL树(高档Java工程师面试和考研必备)-简书(java完成动物年龄的排序)

后台-系统设置-扩展变量-手机广告位-内容正文顶部


avl树概念
界说
avl(adelson-velskii和landis)树是带有平衡条件(balance condition)的二叉查找树。在avl树中任何节点的两个子树的高度最大不一样为1。

特征

首要是一棵二叉查找树,也就是关于一个结点x,x的左孩子要害值均小于x的要害值,x的右孩子要害值均大于x的要害值。
带有平衡条件,每个结点的支配子树的高度之差的必定值最多为1。

avl树平衡特性坚持
avl树在二叉查找树的基础上添加平衡条件。当树中节点发生改变时可以损坏平衡性质,这是需要额定的操作保相等衡性——旋转操作。因为avl树一向坚持的平衡性,当平衡被损坏是高度差的必定值只可认为2。

不平衡的情况分为四种,假定不平衡的树节点为x,即x的支配子树高度之差必定值大于1。


x的左儿子的左子树高出(左左情况)
x的左儿子的右子树高出(支配情况)
x的右儿子的左子树高出(右左情况)
x的右儿子的右子树高出(右右情况)

对应下图1,一起标示了每种情况运用的旋转办法:







图1.avl树不平衡情况--摘自维基百科词条avl树

单旋转(single rotation)
单旋转望文生义就是只旋转一次。


左左情况对应右旋
右右情况对应左旋

如图1中,root节点的一侧高出致使平衡性损坏,很显着需要将高出一侧降低,将低处一侧升高。以pivot为新的root节点旋转一次就是下面的成果图。换句?担叱龅囊徊嘈枰弦埔徊悖痛Φ男枰鲁烈徊恪?br>
如下单旋图所示更为清楚,第一张图x上移一层,z下移一层;第二张图,z上移一层,x下移一层。







左左情况--摘自《数据规划与算法分析-java言语描绘 第二版》






右右情况--摘自《数据规划与算法分析-java言语描绘 第二版》

双旋转(doubl

e rotation)
支配情况与右左情况因为致使不平衡的子树太深需要两次旋转才干保证平衡。初度旋转将高出的有些移至外侧,行程左左情况或许右右情况。


支配情况对应左旋-右旋
右左情况对应右旋-左旋

如图1中所示,支配情况一次左旋变成左左情况,再右旋一次保相等衡;右左情况先一次右旋成右右情况,在左旋一次保相等衡。
下图为双旋成果:







支配情况--摘自《数据规划与算法分析-java言语描绘 第二版






右左情况--摘自《数据规划与算法分析-java言语描绘 第二版

旋转的java代码
avl树平衡捆绑的需求严苛,在代码完成上凌乱,工程中多用红黑树参阅联接完成替代。首要了解avl树的左旋右旋操作,和四种不平衡情况下如何调整即可。

未经允许不得转载:考研网上 - 考研网上辅导班有用吗 > Java完成AVL树(高档Java工程师面试和考研必备)-简书(java完成动物年龄的排序)

后台-系统设置-扩展变量-手机广告位-内容正文底部

相关推荐

评论

留言与评论(共有 0 条评论)
   
验证码: