DataStructuresAndAlogorithm--红黑树
简介
为了理解红黑树(red-black tree)是什么,首先需要知道二叉树。
定义1:二叉树是结点的有限集合,该集合或者为空集,或者是由一个根和两棵互不相交的,称为该根的左子树和右子树的二叉树组成。
但是为了解决实际问题,往往需要对数据作一定的排序,这样才能更快速的找到所要的数据。基于此,我们需要了解下二叉搜索树(Binary Search Tree, BST)。
定义2:设结点由关键字值表征,假定所有结点的关键字值各不相同,二叉搜索树或者谁一棵空二叉树,或者是具有下列性质的二叉树: 1)若左子树不空,则左子树上所有结点的关键字值均小于根结点的关键字值 2)若右子树不空,则右子树上所有结点的关键字值均大于根结点的关键字值 3)左,右子树也分别是二叉搜索树
然而,某些极端情况下,二叉搜索树可能会变成只有左子树或只有右子树等这些极端情况,相当于树退化成了一个链表,为了防止这种退化,我们需要了解些二叉平衡树。
定义3:二叉平衡树又成AVL树(G.M.Adel'son-Vel'skii和E.M.Landis),它或者是一棵空二叉树,或者是具有下列性质的二叉树: 1)其根的左,右子树高度之差的绝对值不超过1 2)其根的左,右子树都是二叉平衡树
然而,这还不是非常完美,因为二叉平衡树的性质1导致了其为了维护其平衡性,需要作过多的旋转调整操作,基于此,红黑树这个弱化的二叉平衡树横空出世。
红黑树在每个结点上增加了一个存储位来表示结点的颜色,可以是RED或BLACK。通过对任何一条根到叶子的简单路径上各个结点的颜色进行约束,红黑树确保没有一条路径会比其他路径长出2倍,因为是近似平衡的。红黑树可以保证在最坏情况下基本动态集合操作的时间复杂度为O(logn)。
一棵红黑树是满足下面红黑性质的二叉搜索树:
1)每个结点的或是红色的,或是黑色的 2)根结点是黑色的 3)每个叶结点(NIL)是黑色的 4)如果一个结点是红色的,则它的两个子结点都是黑色的 5)对每个结点,从该结点到其所有后代叶结点的简单路径上,均包含相同数目的黑色结点