AVL树
平衡二叉树,左右子树高度差不超过1
旋转方式:
- 左旋:右边高,左边低,将失衡节点左旋,有冲突的左孩变右孩
- 右旋:左边高,右边低,将失衡节点右旋,有冲突的右孩变左孩
失衡情况:
(L代表整数,R代表负数)
- LL型:插入的节点在失衡节点的左孩子的左子树上,失衡节点右旋
- RR型:插入的节点在失衡节点的右孩子的右子树上,失衡节点左旋
- LR型:插入的节点在失衡节点的左孩子的右子树上,先左旋左孩子,然后右旋
- RL型:插入的节点在失衡节点的右孩子的左子树上,先右旋右孩子,然后左旋
注意:
- 如果插入节点后,导致多个祖先节点失衡,只需调整距离插入节点最近的失衡节点
- 如果删除节点后导致失衡,需要依次对每个祖先检查并调整
红黑树
平衡二叉树,左右子树高度近似平衡,高度差不会两倍
红黑树性质:
-
根叶黑:根是黑色
-
红生黑:红色节点的左右孩子必须是黑色
-
根叶同:从任意节点到叶子节点的路径上的黑色节点数量相同
插入的节点默认是红色,按照二叉搜索树的规则插入,如果插入后红黑树性质被破坏就需要调整红黑树,调整规则:
- 插入节点是根节点:直接变黑
- 插入节点的叔叔是红色:叔父爷三个节点变色 (红遍黑,黑变红),之后爷爷变插入节点,重新开始判断调整
- 插入节点的叔叔是黑色:判断是LL,RR,LR,RL中的哪种类型,之后旋转,然后对失衡节点和被旋转的节点变色 (红遍黑,黑变红)
相关链接
- 【平衡二叉树(AVL树)】 www.bilibili.com/video/BV1tZ…