红黑树
概念:
红黑树
红黑树(Red Black Tree) 是一种自平衡二叉查找树 , 即一种特化的AVL树(平衡二叉树)
与平衡二叉树不同的是,红黑树是弱平衡二叉树,即它的左右子树高度差有可能大于1,但不超过一倍。
平衡二叉树:
它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
平衡二叉树节点的平衡因子,它指的是该节点的两个子树,即左子树和右子树的高度差,即用左子树的高度减去右子树的高度,如果该节点的某个子树不存在,则该子树的高度为0,如果高度差的绝对值超过1就要根据情况进行调整。
二叉树
它是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树 。 在二叉树中,一个元素也称作一个节点
树类比把现实树倒过来
特点
- 每个节点要么是黑色, 要么是红色。其中根节点是黑色
- 每个叶节点(Nil,空值)都是黑色。
- 每个红色节点的两个子节点一定都是黑色,但黑色节点的子节点可以也是黑色
- 任意一个节点到每个叶子节点的路径都包含相同数量的黑节点,根节点到任意的叶子节点的黑数个数是一样的
- 根节点左右两边的级数不能超过1(会自旋制衡)
总结:
根黑叶黑,红不相邻,黑色平衡
红黑树的优点:查询快(二叉树比数组查询还快)
红黑树的缺点:添加和删除慢(结构会变)
国外数据结构网站:
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
网站画图
理解图
初识红黑树
红黑树
叶子节点
再添加一个节点观察
每个叶节点(Nil,空值)都是黑色
任意一个节点到每个叶子节点的路径都包含相同数量的黑节点,根节点到任意的叶子节点的黑数个数是一样的
红黑树自旋
自旋1
自旋2
自旋3
不自旋,会形成单向链表
根节点左右两边的级数不能超过1(会自旋制衡)