make it run,make it better,make it fast. https://github.com/liulanghaitun
分类: LINUX
2017-10-27 22:13:34
(1)LL:插入一个新节点到根节点的左子树(Left)的左子树(Left),导致根节点的平衡因子由1变为2
(2)RR:插入一个新节点到根节点的右子树(Right)的右子树(Right),导致根节点的平衡因子由-1变为-2
(3)LR:插入一个新节点到根节点的左子树(Left)的右子树(Right),导致根节点的平衡因子由1变为2
(4)RL:插入一个新节点到根节点的右子树(Right)的左子树(Left),导致根节点的平衡因子由-1变为-2
针对四种种情况可能导致的不平衡,可以通过旋转使之变平衡。有两种基本的旋转:
(1)左旋转:将根节点旋转到(根节点的)右孩子的左孩子位置
(2)右旋转:将根节点旋转到(根节点的)左孩子的右孩子位置
1. 新建AVL树
新建AVL树的根节点root。
2. 依次添加"3,2,1,4,5,6,7,16,15,14,13,12,11,10,8,9" 到AVL树中,过程如下。
2.01 添加3,2
添加3,2都不会破坏AVL树的平衡性。
2.02 添加1
添加1之后,AVL树失去平衡,此时需要对AVL树进行旋转(右旋)。旋转过程如下:
2.03 添加4
添加4不会破坏AVL树的平衡性。
2.04 添加5
添加5之后,AVL树失去平衡,此时需要对AVL树进行旋转(左旋转)。旋转过程如下:
2.05 添加6
添加6之后,AVL树失去平衡,此时需要对AVL树进行旋转(左旋转)。旋转过程如下:
2.06 添加7
添加7之后,AVL树失去平衡,此时需要对AVL树进行旋转(左旋转)。旋转过程如下:
2.07 添加16
添加16不会破坏AVL树的平衡性。
2.08 添加15
添加15之后,AVL树失去平衡,此时需要对AVL树进行旋转(右左旋转)。旋转过程如下:
2.09 添加14
添加14之后,AVL树失去平衡,此时需要对AVL树进行旋转(右左旋转)。旋转过程如下:
2.10 添加13
添加13之后,AVL树失去平衡,此时需要对AVL树进行旋转(左旋转)。旋转过程如下:
2.11 添加12
添加12之后,AVL树失去平衡,此时需要对AVL树进行旋转(右旋转)。旋转过程如下:
2.12 添加11
添加11之后,AVL树失去平衡,此时需要对AVL树进行旋转(右旋转)。旋转过程如下:
2.13 添加10
添加10之后,AVL树失去平衡,此时需要对AVL树进行旋转(右旋转)。旋转过程如下:
2.14 添加8
添加8不会破坏AVL树的平衡性。
2.15 添加9
但是添加9之后,AVL树失去平衡,此时需要对AVL树进行旋转(左右旋转)。旋转过程如下:
3. 打印树的信息
输出下面树的信息: