AVL树: AVL树是一颗自平衡的二叉搜索树
AVL 树具有以下性质:
根的左右子树的高度之差的绝对值不能超过1
根的左右子树都是平衡二叉树
度量
通过平衡因子(balancd factor , bf)来具体实现上述平衡二叉树的定义
每个节点的平衡因子是该节点左子树的高度减去右子树的高度
都是以左边看齐
左子树的高度减去,右子树的高度,所以是-1 右边沉的是负数
所以平衡因子是-1
平衡二叉树的新定义(从平衡因子的角度)
- 若一课二叉树中所有节点的平衡因子的绝对值小于1或等于1,则该二叉树称为平衡二叉树
- 平衡二叉树中节点的平衡因子取值为1、0或-1
这个就不是平衡二叉树
重要
插入一个节点可能会破坏AVL树的平衡,可以通过旋转操作来进行修正
插入一个节点后,只有从插入节点到根节点的路径上的节点的平衡可能被改变。我们需要找出第一个破坏了平衡条件的节点,称之为K。K的两颗子树的高度差2
不平衡的出现可能有4种情况
策略 :调整
- LL型调整
- RR型调整
- LR型调整
- RL型调整
谁的根节点引起的麻烦变成根节点
(1) LL型调整 --针对左孩子的左子树上插入引起的不平衡
当a为顶点 ,它的左子树时h+1 ,右子树时h
下面的图 插入一个值,左孩子就是3,右孩子是1 所以 3-1=2
原理就是保持中序
(2) RR型调整 — 针对右孩子的右子树上插入引起的不平衡
(3)LR 型调整 —针对 左孩子的右子树插入引起的不平衡
左孩子的右子树的加入一个i节点 (灰色的) 就变成h+1
c的高度就是h+2了 加B就是h+3
谁引起的麻烦的节点,变成根节点,原根节点的右选
(4) RL型调整 ---- 针对右孩子的左子树上插入引起的不平衡
先右旋 在左旋
谁的节点惹的麻烦,变成根节点,原根节点左旋
2、不平衡时由于对k的左孩子的左子树插入导致的:右旋
1、平衡是由于对K的右孩子的右子树插入导致的: 左旋
3.不平衡是由于对K的右孩子的左子树插入导致的: 先右选后左选
4、不平衡是由于对K的左孩子的右子树插入导致的 先左旋后右选