一、平衡二叉树(AVL树)
性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,而且左右两个子树都是一棵平衡二叉树;
AVL树如图: 3d
非AVL树如图:
致使AVL树失去平衡大体分为4种:
LL:LeftLeft,也称“左左”。插入或删除一个节点后,根节点的左孩子(Left Child)的左孩子(Left Child)还有非空节点,致使根节点的左子树高度比右子树高度高2,AVL树失去平衡。
RR:RightRight,也称“右右”。插入或删除一个节点后,根节点的右孩子(Right Child)的右孩子(Right Child)还有非空节点,致使根节点的右子树高度比左子树高度高2,AVL树失去平衡。
LR:LeftRight,也称“左右”。插入或删除一个节点后,根节点的左孩子(Left Child)的右孩子(Right Child)还有非空节点,致使根节点的左子树高度比右子树高度高2,AVL树失去平衡。
RL:RightLeft,也称“右左”。插入或删除一个节点后,根节点的右孩子(Right Child)的左孩子(Left Child)还有非空节点,致使根节点的右子树高度比左子树高度高2,AVL树失去平衡。
四种失去平衡的状况下对应的旋转方法:
LL旋转步骤:
1)、旧根节点的左孩子为新根节点,
2)、旧根节点变为新根节点的右孩子,
3)、旧根节点的左孩子的右孩子为旧根节点的左孩子 cdn
RR旋转步骤:
1)、旧根节点的右孩子为新根节点,
2)、旧根节点变为新根节点的左孩子,
3)、旧根节点的右孩子的左孩子为旧根节点的右孩子
LR旋转:
1)、根节点的左孩子进行RR旋转,
2)、根节点进行LL旋转,
RL旋转:
1)、根节点的右孩子进行LL旋转,
2)、根节点进行RR旋转,