前言
红黑树与AVL树是数据结构中避不开的话题,也是面试中常问的问题。今天就把他们总结在一起。
一、AVL是什么?
向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中的结点进行调整),即可降低树的高度,从而减少平均搜索长度。为什么高度差的绝对值不超过1而不是0呢?因为如果高度差的绝对值不超过0,那么二叉树就变成满二叉树了,因此绝对值不能超过1。这就引入了平衡二叉树的概念:
AVL树也是一种自平衡的二叉搜索树,它通过节点的平衡因子(左子树高度减去右子树高度)来保持树的平衡性。AVL树的平衡性维护主要通过旋转操作来实现。
二、AVL的插入与删除
插入
1、插入新节点时,按照二叉搜索树的规则将其插入到合适的位置。
2、自底向上遍历从插入节点到根节点的路径,更新每个节点的平衡因子。
3、如果某个节点的平衡因子超过了1或-1,表示树失去了平衡,需要进行旋转操作来恢复平衡。
a、如果插入节点在失衡节点的左子树的左子树中,进行右旋操作。
b、如果插入节点在失衡节点的右子树的右子树中,进行左旋操作。
c、如果插入节点在失衡节点的左子树的右子树中,先对失衡节点的左子树进行左旋操作,再对失衡节点进行右旋操作。
d、如果插入节点在失衡节点的右子树的左子树中,先对失衡节点的右子树进行右旋操作,再对失衡节点进行左旋操作。
重复步骤2和步骤3,直到达到根节点。</