一、红黑树Red-black Tree:
` 红黑树一种自平衡二叉查找树,是计算机科学中用到的一种数据结构,典型用途是实现关联数组。红黑书很复杂,但是他的操作有良好的最坏情况运行时间,不管是查找、插入和删除,他的时间复杂度都是O(logn),其中的n是树中元素的数目。
二、二叉查找树Binary Search Tree:
` 二叉查找树也称二叉搜索树、有序二叉树(ordered binary tree)、排序二叉树(sorted binary tree)。是指一颗空树或者具有以下性质的二叉树:
(1)若任意节点的左子树不为空,则左子树上所有节点的值均小于它根节点的值。
(2)若任意节点的右子树不为空,则右子树上所有节点的值均大于它根节点的值。
(3)任意节点的左右子树也分别为二叉查找树
没有键值相等的节点,也就是节点唯一。
三、红黑树特征:
` (1)每一个节点不是黑色就是红色;
(2)根节点总是黑色的;
(3)每一个叶子结点都是黑色的空节点(NIL节点);
(4)如果一个节点是红色的,那么它的子节点一定是黑色的,反之不成立;
(5)从根节点到任意一个最底下的子节点,这条路径中所包含的黑色节点个数必须是相同的,即黑色节点的高度是相同的;
(6)在插入节点时,插入的节点一定是红色节点。插黑节点一定会冲突,不能保证黑色节点高度一致;但是插入红色节点,有一半概率会冲突,不能保证红色节点的子节点是黑色节点。
四、平衡性修正的方法:
` (1)变色
父节点为黑,两个子节点为红,变色就是将父节点变红,子节点都变黑。
(2)左旋
(3)右旋
五、红黑树的自平衡修正规律:
` (1)如果父节点和叔父节点都是红色,则将父节点以及叔父节点涂黑,将祖父节点涂红;
(2)如果父节点是红色且叔父节点是黑色,并且当前结点是右子节点,以当前节点为基准进行左旋;
(3)如果父节点是红色且叔父节点是黑色,并且当前节点是左子节点,以父节点为基准进行右旋。
如下例子: