平衡二叉查找树(AVL Tree)
平衡二叉查找树是空树或者一种结构平衡的二叉查找树,即叶节点高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
如果在AVL树中进行插入或删除节点,可能导致AVL树失去平衡,这种失去平衡的二叉树可以概括为四种姿态:LL(左左)、RR(右右)、LR(左右)、RL(右左)。
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树失去平衡。
平衡二叉树的最少结点数:n(h)=n(h-1)+n(h-2)+1
给定结点数为n的AVL树的最大高度为O(log2 n)
平衡二叉树的调整
左单旋
treePtr singleLeft(treePtr T){
treePtr tmpPtr;
tmpPtr = T;
T = T->Left;
tmpPtr->Left = T->Right;
T->Right = tmpPtr;
tmpPtr->H