AVL树对二叉树的要求较高,为了维护查找的性能,所作的计算和操做比较复杂,维护成本比较大。为了简化维护的成本,同时又能保证查找的性能,提出了红黑树的概念。性能
如图所示:spa
如图所示:it
插入状况须要分状况讨论:class
空树到新增一个节点,直接插入节点而后变色,如图所示:基础
只有一个根节点的话,根结点是黑色的,那么直接插入新增结点,如图所示:二叉树
插入结点N处父亲结点P是红色的,叔叔结点U是红色的,结点N表示新插入的结点。须要再细分状况讨论进行讨论:此状况下红黑树的多是一颗完整的红黑树,也多是一颗红黑树的的一部分子树;引用
如果一棵红黑树的子树,须要分三步调整操做:im
如图所示:
上图节点中的1,2,3,4,5表明结点之下的子树或是NIL结点,上图中显示的是一个中间过渡状态。后续都是以相似形式表示子树d3
插入结点N处的父结点P为红色,叔叔结点U为黑色,且新插入的结点N是结点P的右孩子,且结点P是结点G的右孩子,须要进行以下调整操做:总结
如图所示:
插入结点N处的父结点P为红色,叔叔结点U为黑色,且新插入的结点N是结点P的左孩子,且结点P是结点G的左孩子,须要进行以下调整操做:
如图所示:
状况三中的第二种状况以及状况4、状况五相对来讲比较抽象,下面我举个例子来帮助你们理解,状况3、状况四和状况五之间的关系,例子是从网上看到的红黑树相关例子,在此基础上进行的调整,如图所示:
如上图所示对应状况三,结点4表示新插入的结点N,结点5为父结点P,结点8为叔叔结点U,须要按照状况三子树状况进行调整:
在经过状况三的调整操做以后获得的红黑树的状态正好符合状况四的描述,如图所示:如上图所示,结点7表示新插入的结点N,结点2为父结点P,结点14为叔叔结点U,结点11为祖辈结点G,按照状况四对应的操做进行调整,如图所示:
通过状况四的调整操做之后获得的红黑树状态正好符合状况五的描述,如图所示:
如上图所示,结点2表示新插入的结点N,结点7为父结点P,结点14为叔叔结点U,结点11为祖辈结点G,按照状况五的操做进行调整,如图所示:
经过示例咱们能够看出,红黑树相关状况之间的关系,状况三的发生只是一个开始;根据状况三的调整,可能会产生状况四但不必定,也有多是会差生状况三,也有多是状况五,可是不管是什么状况,咱们只要记住对应的情况描述及相关的调整,就能够对红黑树进行调整了。