您的位置:首页 > 理论基础 > 数据结构算法

数据结构笔记(3)树——AVL树以及恼人的旋转

2017-12-21 22:42 274 查看

AVL树

带有平衡条件的二叉查找树——每个节点的左子树和右子树的高度最多差1的二叉查找树。

空树的高度定义为-1。

当插入节点时,有可能破坏AVL树的平衡性,分为以下几种情形:

对a的左儿子的左子树进行一次插入(左左/LL)

对a的右儿子的右子树进行一次插入(右右/RR)

对a的左儿子的右子树进行一次插入(左右/LR)

对a的右儿子的左子树进行一次插入(右左/RL)

对于以上四种情形,可分为两类,前两者通过单旋转解决,后两种通过双旋转解决。

单旋转:



可以看出节点8成为了插入后被破坏平衡的点,则在该点与其子节点间做一次单旋转(-8–9-),图示为对RR情况进行的逆时针旋转。

单旋转将被破坏平衡的点降下一单位高度,其子树提升至其原来的位置。

值得一提的是,如果节点9拥有左子树(8< x <9)需要将该树(x)添加到8节点的右子树上以保持整个树仍为二叉查找树。



双旋转:



易知当插入节点14后,被破坏平衡的节点为6,插入方式为右左:

先将右儿子向右转。

再将根向左转。

双旋转先解决被插入的儿子,再解决根节点。

在进行旋转时,同样要遵守“过继”的原则,就是把被提升节点的对应子树赋给其新子树的对应位置。(emmmm,不是很好形容,但是我觉得“过继”这个词很传神。)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: