AVL树的调整方法
AVL树的特性
他的左子树的节点数据小于根节点的数据,根节点的数据小于右子树节点的数据
他的左右子树的高度差的绝对值小于1
AVL树节点的定义:
typedefstructTreeNode{
int data;
int height;
structTreeNode*lchild;
structTreeNode*rchild;
}TreeNode;
下面来讲调整方法,顺时针旋转为左,逆时针旋转为右 ll也就是我们说的左左调整 总的来说:就是根成为他左孩子的右孩子,因为根节点一定大于他的左孩子,只能把他调为左孩子的右孩子,左孩子变为根节点,这样才可以符合AVL树的特点,左右子树的高度差小于1,在调整后一定一定不要忘了调整节点的高度,不然在判断的时候会引起连锁反应导致真没也无法调平 调整思路:将根节点的左孩子也就是现在的3当成新的根,把原来的根也就是7,因为他肯定大于他原来的左孩子3,所以他一定会变成现在的根3的右孩子,而原来3的右孩子4一定小于原来的根7,所以就放到7的左边成为他的左孩子,切记原有的二叉树己经改变,需要更新新的节点的高度 rr调整也就是我们说的右右调整 调整思路:和刚才思路差不多就不过多解释了,原来根节点的右孩子10成为现在的根节点,10的左孩子9大于4变为4的右孩子切记一定要及时更新调整节点的高度,不然会影响后续的调整! lr调整 rl调整也和lr也一样,先对根节点的右子树进行l调整在对根节点进行r调整切记一定要及时更新调整节点的高度,不然会影响后续的调整!rl调整和lr调整一样就是变为先ll在rr了 简便的记忆插入右导致其变的失去平衡就要lr反正rl前提得是两次调整