红黑树RBTree

  

概述:R-B树,又称为“红黑树”。本文参考了《算法导论》中红黑树相关知识,加之自己的解,然后以图文的形式对红黑树进行说明。本文的主要内容包括:红黑树的特性,红黑树的时间复杂度和它的证明,红黑树的左旋,右旋,插入等操作。


<强>
<强>
<强>
<强>
<强>

红黑树RBTree

<强>

<强>

<强>





<强>

,

<强>

<强>

<强>
是:下面介绍情况三的三种情况。

,









,






,

,# include   using  namespace 性传播疾病;   enum 颜色   {   ,黑色,   ,红   };   template   struct  RBTreeNode   {   ,RBTreeNode (const  K&,钥匙,const  V&价值,const  Color  col =,红色)   ,:_left(空)   ,,_right(空)   ,,_parent(空)   ,,_col (col)   ,,_key(键)   ,,_value(值)   ,{}   ,RBTreeNode *, _left;   ,RBTreeNode *, _right;   ,RBTreeNode *, _parent;   ,Color  _col;   ,K  _key;   ,V  _value;   };   template   class  RBTree   {   ,typedef  RBTreeNode,节点;   公众:   ,RBTree ()   :_root才能(空)   ,{}   ,bool 插入(const  K&,,, const  V&,值)   ,{   if 才能;(_root ==, NULL)   {才能   ,,_root =, new 节点(键,值,,黑);   ,,return 真实;   ,,}   节点才能*,parent =,空;   节点才能*,cur =, _root;   while 才能;(坏蛋)   {才能   ,,if  (cur→_key 祝辞,键)   ,,{   ,,,parent =,坏蛋;   ,,,cur =,坏蛋→_left;   ,,}   ,,else  if  (cur→_key  & lt;,键)   ,,{   ,,,parent =,坏蛋;   ,,,cur =,坏蛋→_right;   ,,}   其他的,,   ,,{   ,,,休息;   ,,}   ,,}   cur 才能=,new 节点(键,值,,红色);   if 才能;(父→_key  & lt;键)   {才能   ,,父母→_right =,坏蛋;   ,,坏蛋→_parent =,父母;   ,,}   其他的才能   {才能   ,,父母→_left =,坏蛋;   ,,坏蛋→_parent =,父母;   ,,}//调才能色   while 才能;(cur  !=, _root ,,,父母→_col ==,红色)   {才能   ,,节点*,grandfather =,父→_parent;   ,,if  (parent ==,祖父→_left)   ,,{   ,,,节点*,uncle =,祖父→_right;   ,,,if  (uncle ,,,叔叔→_col ==,红色)   ,,,{   ,,,,叔叔→_col =,父→_col =,黑色;   ,,,,祖父→_col =,红色;   ,,,,cur =,祖父;   ,,,,parent =,坏蛋→_parent;   ,,,}   ,,,//当叔叔节点为黑色,且S为F的右孩子,处理步骤,1,以父节点进行左旋,2将父节点变黑祖父节点变红,3然后进行右旋   ,,,   ,,,{   ,,,,if  (cur ==,父→_right)   ,,,,{   ,,,,,RotateL(父);   ,,,,,交换(坏蛋,,父母);   ,,,,}   ,,,,旋转(爷爷);   ,,,,父母→_col =,黑色;   ,,,,祖父→_col =,红色;   ,,,}   ,,}   ,,,else //往右子树插   ,,{   ,,,节点*,uncle =,祖父→_left;   ,,,if  (uncle ,,,叔叔→_col ==,红色)   ,,,{   ,,,,叔叔→_col =,父→_col =,黑色;   ,,,,祖父→_col =,红色;   ,,,,cur =,祖父;   ,,,,parent =,坏蛋→_parent;   ,,,}   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

红黑树RBTree