红黑树(RBTREE)之上-------构造红黑树

该怎么说呢,现在写代码的速度还是很快的,很高兴,o(^▽^)o。

光棍节到了,早上没忍住,手贱了一般,看到*D的优惠,买了个机械键盘,晚上就到了,敲着还是很舒服的,和老婆炫耀了一把哈哈。

光棍节再去*mall买个,带着上班用。

正题,构造红黑树,就是节点的插入与调整,具体的理论我就不说了,图我也不画了,别人画的很好,我在纸上画的我自己都不想看。

 

贴几个网址作为参考吧:

 

参考的文档:1.http://www.cnblogs.com/zhb-php/p/5504481.html (推荐)
2.http://www.cnblogs.com/skywang12345/p/3245399.html 参考,写的太详细了,反而不适合当文档
3.http://blog.csdn.net/v_july_v/article/details/6284050 这个刚好作为测试的参考图
这次的变量命名基本注意了,不过有些以前写的拿过来改改,懒得去把所有的都改了,写这个好像没有什么收获,好像数据结构基本的一些常用的都写了,还有个hash表下次写。
最近工作应该算是忙吧,但是做的都是偏测试的,更希望去写代码来锻炼自己。另一方面,解决问题感觉啥事都要靠自己啊,别人还是不靠谱的,以后尽量能不问别人就别去问了,感觉自己都烦了,问了别人解决不了
,浪费大家的时间最后还是要靠自己去解决。不爽。。。
环境:qt5
语言:c
代码:head_file:rb_func.h
 1 #ifndef RB_MAIN
 2 #define RB_MAIN
 3 
 4 #define DEBUG 1
 5 #define  RED   1
 6 #define  BLACK   0
 7 #define R RED
 8 #define  B BLACK
 9 #define OK 0
10 #define ERR -1
11 
12 #if 1
13 #define Left 1
14 #define Right -1
15 #endif
16 #ifndef NULL
17     #define NULL 0
18 #endif
19 #define PRINTTREEINIT(a)
20         printf("------------------init Tree begin-------------
");
21         PrintBTree(a);
22         printf("------------------init Tree end-------------
");
23 #define PRINTTREEAVL(a)
24         printf("------------------AVL Tree begin-------------
");
25         PrintBTree(a);
26         printf("------------------AVL Tree end-------------
");
27 
28 #define PRINTTREEDEL(a)
29         printf("------------------after del node Tree begin-------------
");
30         PrintBTree(a);
31         printf("------------------after del nodeTree end-------------
");
32 
33 #define PRINTTREEADJ(a)
34         printf("------------------after adjust  Tree begin-------------
");
35         PrintBTree(a);
36         printf("------------------after adjust Tree end-------------
");
37 typedef int  DATATYPE;
38 
39 typedef struct treenode
40 {
41     DATATYPE data;
42     struct treenode *parent;
43     struct treenode *lchild;
44     struct treenode *rchild;
45     unsigned int  color;
46 }TreeNode;
47 
48 
49 typedef TreeNode* RBTREE;
50 void PrintBTree(RBTREE* btree);
51 void PrintTreeNode(TreeNode* );
52 void PrintViewTreeNode(TreeNode* treeNode, int num);
53 void PrintNTab(int i);
54 /*
55 TreeNode* InitRBTree(DATATYPE oriData[],  int size);
56 */
57 RBTREE* InitRBTree(DATATYPE oriData[],  int size);
58 
59 TreeNode *GetFixNode(RBTREE *pRBTree, DATATYPE data);
60 TreeNode * InitRootNode(DATATYPE data, TreeNode* pNewTreeNode);
61 TreeNode *InsertNode(TreeNode* pParNode, DATATYPE data);
62 int AdjustNode(TreeNode* pParNode, RBTREE* pRBTree);
63 int IsLChild(TreeNode* pSonNode);
64 TreeNode* Spinning(TreeNode *pCurNode,unsigned int iOp, RBTREE* pRBTree);
65 
66 
67 
68 
69 
70 
71 
72 
73 
74 #endif // RB_MAIN
head_file_code

process_file:rb_func.c

  1 #include "rb_func.h"
  2 
  3 
  4 
  5 void PrintNTab(int num)
  6 {
  7     int i = 0;
  8 
  9     while(i<num)
 10     {
 11        printf("    ");
 12        i++;
 13     }
 14 }
 15 
 16 void PrintViewTreeNode(TreeNode* treeNode, int num)
 17 {
 18     num++;
 19     char cColor;
 20     if(RED == treeNode->color ) cColor = 'R';
 21     if(BLACK == treeNode->color ) cColor = 'B';
 22     printf("%d %c", treeNode->data, cColor);
 23     if(treeNode->lchild == NULL)
 24     {
 25         printf("
");
 26         PrintNTab(num);
 27         printf("*");
 28     }
 29     else
 30     {    printf("
");
 31          PrintNTab(num);
 32          PrintViewTreeNode(treeNode->lchild, num);
 33     }
 34     if(treeNode->rchild == NULL)
 35     {
 36         printf("
");
 37         PrintNTab(num);
 38         printf("&");
 39 
 40     }
 41     else
 42     {
 43         printf("
");
 44         PrintNTab(num);
 45         PrintViewTreeNode(treeNode->rchild, num);
 46 
 47     }
 48 
 49 
 50 }
 51 
 52 /*这个看不出来树的结构了,需要重新写打印方法。*/
 53 void PrintTreeNode(TreeNode* treeNode)
 54 {
 55     if((treeNode->lchild == NULL)
 56             &&(treeNode->rchild == NULL))
 57     {
 58        printf("%d
", treeNode->data);
 59     }
 60     else
 61     {
 62         if((treeNode->lchild != NULL)
 63                 || (treeNode->rchild != NULL))
 64         {
 65             printf("%d ", treeNode->data);
 66             if(treeNode->lchild != NULL)
 67             {
 68                 printf("--->");
 69                 PrintTreeNode(treeNode->lchild);
 70             }
 71             printf("%d ", treeNode->data);
 72             if(treeNode->rchild != NULL)
 73             {
 74                 printf("===>");
 75                 PrintTreeNode(treeNode->rchild);
 76             }
 77         }
 78     }
 79     return ;
 80 }
 81 
 82 void PrintBTree(RBTREE* btree)
 83 {
 84     int num = 0;
 85     if(btree==NULL)
 86     {
 87         printf("empty tree.
");
 88     }
 89     #if 0
 90     printf("TreeView Rule---若一个节点有左右孩子节点,则父节点一行一列,左右孩子不同行同一列,若无做孩子,则打印的数据用*代替,如果无有孩子则打印的数据用&代替"
 91            "另外树的层次用4个空格来体现,比如第1列代表第一层,第5列代表第二层。
"
 92            );
 93     #endif
 94     printf("***********TREE View BEGIN***********
");
 95     PrintViewTreeNode(*btree, num);
 96     printf("
");
 97     printf("***********TREE View END ***********
");
 98     printf("
");
 99 }
100 
101 
102 TreeNode * InitRootNode(DATATYPE data, TreeNode* pNewTreeNode)
103 {
104     pNewTreeNode->data = data;
105     pNewTreeNode->parent = NULL;
106     pNewTreeNode->lchild = NULL;
107     pNewTreeNode->rchild = NULL;
108     pNewTreeNode->color = B;
109     return pNewTreeNode;
110 }
111 
112 
113 //查找合适的位置来插入新元素(find parent)
114 TreeNode *GetFixNode(RBTREE *pRBTree, DATATYPE data)
115 {
116      if((pRBTree == NULL ))
117      {
118          return NULL;
119      }
120 
121      if(((*pRBTree)->lchild == NULL)
122              &&((*pRBTree)->rchild == NULL))
123      {
124          printf("insert under root 
");
125          return *pRBTree;
126      }
127      TreeNode* pCurTreeNode = *pRBTree;
128      while( (pCurTreeNode->lchild != NULL)
129            ||(pCurTreeNode->rchild !=NULL) )
130      {
131          if(data > pCurTreeNode->data)
132          {
133              //printf("insert R 
");
134              printf(" data=[%d] curData=[%d] insert R 
", data, pCurTreeNode->data);
135              if(pCurTreeNode->rchild != NULL)
136              {
137                  printf("pCurTreeNode->rchild != NULL rchild[%d]
", pCurTreeNode->rchild->data);
138                  pCurTreeNode = pCurTreeNode->rchild;
139 
140              }else{
141 
142                  break;
143              }
144          }
145          else if(data < pCurTreeNode->data)
146          {
147              printf(" data=[%d] curData=[%d] insert L 
", data, pCurTreeNode->data);
148              if(pCurTreeNode->lchild != NULL)
149              {
150                  pCurTreeNode = pCurTreeNode->lchild;
151              }else{
152                  break;
153              }
154          }
155          else
156          {
157              printf("invaild elem here at line %d.
", __LINE__);
158              return NULL;
159          }
160      }
161      return pCurTreeNode;
162 }
163 
164 //将一个值插入节点的L/R子树上
165 TreeNode *InsertNode(TreeNode* pParNode, DATATYPE data)
166 {
167 #if DEBUG
168     /*这里要处理相等的情况*/
169     if(data == pParNode->data)
170     {
171         printf("invaild data %d
", data);
172         printf("invaild para here at line %d.
", __LINE__);
173         return NULL;
174     }
175 #endif
176     TreeNode* pSonTreeNode = (TreeNode*)malloc(sizeof(TreeNode));
177     pSonTreeNode->data = data;
178     pSonTreeNode->lchild = NULL;
179     pSonTreeNode->rchild = NULL;
180     pSonTreeNode->color = RED;
181     pSonTreeNode->parent = pParNode;
182     if(data < pParNode->data)
183     {
184          pParNode->lchild = pSonTreeNode;
185     }
186     else{
187         pParNode->rchild = pSonTreeNode;
188     }
189     return pSonTreeNode;
190 }
191 TreeNode* Spinning(TreeNode *pCurNode,unsigned int iOp, RBTREE* pRBTree)
192 {
193     TreeNode *pLChild = NULL;
194     TreeNode *pRChild = NULL;
195     TreeNode *pParent = NULL;
196 
197     //TreeNode *pA = NULL;
198     int iIsLChild = IsLChild(pCurNode);
199     if(NULL == pCurNode) return NULL;
200     if(Left == iOp)
201     {
202         //左旋
203         if(NULL == pCurNode->rchild) return NULL;
204         pLChild = pCurNode->rchild->lchild;/*z的左孩子*/
205         pRChild = pCurNode->rchild;
206         if(-1 != iIsLChild){
207             pParent = pCurNode->parent;
208         }
209         else
210         {
211             *pRBTree = pRChild;
212         }
213         if(NULL != pLChild)
214         {
215             pLChild->parent = pCurNode;
216         }
217         pCurNode->rchild = pLChild;
218 
219         pRChild->lchild = pCurNode;
220         pCurNode->parent = pRChild;
221 
222         pRChild->parent = pParent;
223         if(-1 != iIsLChild)
224         {
225             if(1 == iIsLChild)
226             {
227                 pParent->lchild = pRChild;
228             }
229             else
230             {
231                 pParent->rchild = pRChild;
232             }
233         }
234         return pRChild;
235     }
236     else if(Right == iOp)
237     {
238           //右旋
239         if(NULL == pCurNode->lchild) return NULL;
240         pRChild = pCurNode->lchild->rchild;/*z的左孩子*/
241         pLChild = pCurNode->lchild;
242         if(-1 != iIsLChild){
243             pParent = pCurNode->parent;
244         }
245         else
246         {
247             *pRBTree = pLChild;
248         }
249         if(NULL != pRChild)
250         {
251             pRChild->parent = pCurNode;
252         }
253         pCurNode->lchild = pRChild;
254 
255         pLChild->rchild = pCurNode;
256         pCurNode->parent = pLChild;
257 
258         pLChild->parent = pParent;
259         if(-1 != iIsLChild)
260         {
261             if(1 == iIsLChild)
262             {
263                 pParent->lchild = pLChild;
264             }
265             else
266             {
267                 pParent->rchild = pLChild;
268             }
269         }
270         return pLChild;
271 
272     }
273 }
274 int AdjustNode(TreeNode* pCurNode, RBTREE* pRBTree)
275 {
276     if(NULL == pRBTree) goto err;
277     int LRFlag = 0;
278     int CurLRFlag = 0;
279 
280     if(BLACK == pCurNode->parent->color) return OK;
281     unsigned int iCase = 0;
282     TreeNode *pParNode = pCurNode->parent;
283     LRFlag = IsLChild(pParNode);
284     CurLRFlag = IsLChild(pCurNode);
285     if(LRFlag)
286     {
287   /*tsb*/
288         if((NULL != pParNode->parent->rchild)&&
289                 (RED == pParNode->parent->rchild->color))
290         {
291             iCase = 1;
292         }else
293         {
294             if(CurLRFlag)
295             { /*case 2:父节点是左孩子当前节点的父节点是红色,叔叔节点是黑色,当前节点是其父节点的左孩子;        */
296                 /*cur in L*/
297                 iCase = 2;
298 
299             }
300             else
301             { /*case 3:当前节点的父节点是红色,叔叔节点是黑色,当前节点是其父节点的右子;     */
302                 iCase = 3;
303             }
304 
305         }
306   /*tse*/
307 #if 0
308         if(NULL != pParNode->parent->rchild)
309         {
310             if(//(RED == pParNode->color)&&
311                 (RED == pParNode->parent->rchild->color))
312             { /*case 1:父节点是左孩子 如果当前结点的父结点是红色且祖父结点的另一个子结点(叔叔结点)是红色;        */
313                 iCase = 1;
314             }
315             else if(//(RED == pParNode->color)&&
316                   (B == pParNode->parent->rchild->color))
317             {
318                 if(CurLRFlag)
319                 { /*case 2:父节点是左孩子当前节点的父节点是红色,叔叔节点是黑色,当前节点是其父节点的左孩子;        */
320                     /*cur in L*/
321                     iCase = 2;
322 
323                 }
324                 else
325                 { /*case 3:当前节点的父节点是红色,叔叔节点是黑色,当前节点是其父节点的右子;     */
326                     iCase = 3;
327                 }
328             }
329         }
330         else
331         {
332             if(CurLRFlag)
333             { /*case 2:父节点是左孩子当前节点的父节点是红色,叔叔节点是黑色,当前节点是其父节点的左孩子;        */
334                 /*cur in L*/
335                 iCase = 2;
336 
337             }
338             else
339             { /*case 3:当前节点的父节点是红色,叔叔节点是黑色,当前节点是其父节点的右子;     */
340                 iCase = 3;
341             }
342         }
343 #endif
344     }
345     else
346     {
347         if(NULL != pParNode->parent->lchild)
348         {
349             if(//(RED == pParNode->color)&&
350                 (RED == pParNode->parent->rchild->color))
351             { /*case 1:父节点是R孩子 如果当前结点的父结点是红色且祖父结点的另一个子结点(叔叔结点)是红色;        */
352                 iCase = 4;
353             }
354             else if(//(RED == pParNode->color)&&
355                   (B == pParNode->parent->rchild->color))
356             {
357                 if(CurLRFlag)
358                 { /*case 2:父节点是R孩子当前节点的父节点是红色,叔叔节点是黑色,当前节点是其父节点的左孩子;        */
359                     /*cur in L*/
360                     iCase = 5;
361                 }
362                 else
363                 { /*case 3:当前节点的父节点是红色,叔叔节点是黑色,当前节点是其父节点的右子;     */
364                     iCase = 6;
365                 }
366             }
367         }
368         else {
369             if(CurLRFlag)
370             { /*case 2:父节点是R孩子当前节点的父节点是红色,叔叔节点是黑色,当前节点是其父节点的左孩子;        */
371                 /*cur in L*/
372                 iCase = 5;
373             }
374             else
375             { /*case 3:当前节点的父节点是红色,叔叔节点是黑色,当前节点是其父节点的右子;     */
376                 iCase = 6;
377             }
378         }
379     }
380 
381     switch (iCase) {
382     case 1:
383         pParNode->color = B;
384         pParNode->parent->rchild->color = B;
385         pParNode->parent->color = R;
386 
387         pCurNode = pParNode->parent;/*this cur is Red*/
388         if(pCurNode == *pRBTree)
389         {/*process the pCurNode is rootNode.*/
390             pCurNode->color = BLACK;
391         }else
392         {
393             AdjustNode(pCurNode, pRBTree);
394         }
395             break;
396     case 2:
397         pParNode->color = B;
398         pParNode->parent->color = R;
399         pCurNode =  Spinning(pParNode->parent,Right, pRBTree);/*this cur is  Black*/
400 
401         break;
402     case 3:
403         pCurNode= pParNode;
404         pCurNode = Spinning(pCurNode,Left, pRBTree);
405 #if 0
406         pParNode = pCurNode;
407         pCurNode = pCurNode->lchild;
408         iCase = 2;
409 #endif
410         pCurNode = pCurNode->lchild;
411         AdjustNode(pCurNode, pRBTree);
412 
413 
414         break;
415     case 4:
416         pParNode->color = B;
417         pParNode->parent->lchild->color = B;
418         pParNode->parent->color = R;
419         pCurNode = pParNode->parent;
420         if(pCurNode == *pRBTree)
421         {/*process the pCurNode is rootNode.*/
422             pCurNode->color = BLACK;
423         }else
424         {
425             AdjustNode(pCurNode, pRBTree);
426         }
427         break;
428     case 5:
429 
430         pCurNode= pParNode;
431         pCurNode =Spinning(pCurNode,Right,pRBTree);
432 #if 0
433         pParNode = pCurNode;
434         pCurNode = pCurNode->rchild;
435         iCase = 6;
436 
437 #endif
438         pCurNode = pCurNode->rchild;
439         AdjustNode(pCurNode, pRBTree);
440 
441         break;
442     case 6:
443         pParNode->color = B;
444         pParNode->parent->color = R;
445         pCurNode = Spinning(pParNode->parent,Left, pRBTree);
446 
447         break;
448     default:
449         goto err;
450         break;
451     }
452     return OK;
453 
454 err:
455     printf("in para err.
");
456     return ERR;
457 
458 }
459 /*1---------->is*/
460 int IsLChild(TreeNode* pSonNode)
461 {
462     if(pSonNode->parent ==NULL)return -1;
463     return ((pSonNode->parent->lchild == pSonNode)?1:0);
464 }
465 
466 /* 这个返回值不好,改掉哈哈
467  * TreeNode* InitRBTree(DATATYPE oriData[],  int size)
468  */
469 RBTREE* InitRBTree(DATATYPE oriData[],  int size)
470 {
471     RBTREE* pRBTree = NULL;
472     pRBTree = (RBTREE*)malloc(sizeof(RBTREE));
473     *pRBTree = (TreeNode*)malloc(sizeof(TreeNode));
474     int pos = size;
475     int iRet = 0;
476     InitRootNode(oriData[0], *pRBTree);
477     TreeNode *pParentPosNode = NULL;
478     TreeNode *pCurNode = NULL;
479 
480     while(pos>1)
481     {
482 #if DEBUG
483         printf("********begin one*************
");
484         printf("pos = [%d] index =[%d] insert_data[%d]
", pos, size-pos+1, oriData[size-pos+1]);
485 #endif
486         pParentPosNode = GetFixNode(pRBTree, oriData[size-pos+1]);
487 #if DEBUG
488         printf("Parent = [%d] Insert data=[%d]  
", pParentPosNode->data, oriData[size-pos+1] );
489 #endif
490         pCurNode = InsertNode(pParentPosNode, oriData[size-pos+1]);
491 
492         iRet = AdjustNode(pCurNode, pRBTree);
493         PrintBTree(pRBTree);
494         pos--;
495 #if DEBUG
496         printf("********end one*************

");
497 #endif
498 
499     }
500 
501     printf("********pRBTree data %d*************

", (*pRBTree)->data);
502 
503     return pRBTree;
504 
505 }
process_code

main_file:main.c

 1 #include <stdio.h>
 2 #include "rb_func.h"
 3  
 4 int testcase_1()
 5 {
 6     /*
 7      * int iArr[]= {12,1,9,2,0,11,7};
 8      */
 9     int iArr[]= {12,1,9,2,0,11,7,19,4,15,18,5,14,13,10,16,6,3,8,17};
10 
11 #if 0
12     /*这里写的不好,initRBTree原先返回的是TreeNode*  ,现在改为指向返回RBTREE*的指针*/
13     RBTREE *avlTree = NULL;
14     TreeNode *rootNode = NULL;
15     rootNode= InitRBTree(iArr, sizeof(iArr)/sizeof(iArr[0]));
16     avlTree = (RBTREE*)malloc(sizeof(TreeNode*));
17     *avlTree = (TreeNode*)malloc(sizeof(TreeNode));
18     *avlTree = rootNode;
19 #endif
20     RBTREE *pRBTree = InitRBTree(iArr, sizeof(iArr)/sizeof(iArr[0]));
21     PRINTTREEINIT(pRBTree);
22     return 0;
23 }
24 int main(void)
25 {
26     testcase_1();
27     return 0;
28 }
main_code

运行的demo数据(数组)是从一个网站上copy的,这里贴上我的运行结果:


  1 ********begin one*************
  2 pos = [20] index =[1] insert_data[1]
  3 insert under root
  4 Parent = [12] Insert data=[1]
  5 ***********TREE View BEGIN***********
  6 12 B
  7     1 R
  8         *
  9         &
 10     &
 11 ***********TREE View END ***********
 12 
 13 ********end one*************
 14 
 15 ********begin one*************
 16 pos = [19] index =[2] insert_data[9]
 17  data=[9] curData=[12] insert L
 18 Parent = [1] Insert data=[9]
 19 ***********TREE View BEGIN***********
 20 9 B
 21     1 R
 22         *
 23         &
 24     12 R
 25         *
 26         &
 27 ***********TREE View END ***********
 28 
 29 ********end one*************
 30 
 31 ********begin one*************
 32 pos = [18] index =[3] insert_data[2]
 33  data=[2] curData=[9] insert L
 34 Parent = [1] Insert data=[2]
 35 ***********TREE View BEGIN***********
 36 9 B
 37     1 B
 38         *
 39         2 R
 40             *
 41             &
 42     12 B
 43         *
 44         &
 45 ***********TREE View END ***********
 46 
 47 ********end one*************
 48 
 49 ********begin one*************
 50 pos = [17] index =[4] insert_data[0]
 51  data=[0] curData=[9] insert L
 52  data=[0] curData=[1] insert L
 53 Parent = [1] Insert data=[0]
 54 ***********TREE View BEGIN***********
 55 9 B
 56     1 B
 57         0 R
 58             *
 59             &
 60         2 R
 61             *
 62             &
 63     12 B
 64         *
 65         &
 66 ***********TREE View END ***********
 67 
 68 ********end one*************
 69 
 70 ********begin one*************
 71 pos = [16] index =[5] insert_data[11]
 72  data=[11] curData=[9] insert R
 73 pCurTreeNode->rchild != NULL rchild[12]
 74 Parent = [12] Insert data=[11]
 75 ***********TREE View BEGIN***********
 76 9 B
 77     1 B
 78         0 R
 79             *
 80             &
 81         2 R
 82             *
 83             &
 84     12 B
 85         11 R
 86             *
 87             &
 88         &
 89 ***********TREE View END ***********
 90 
 91 ********end one*************
 92 
 93 ********begin one*************
 94 pos = [15] index =[6] insert_data[7]
 95  data=[7] curData=[9] insert L
 96  data=[7] curData=[1] insert R
 97 pCurTreeNode->rchild != NULL rchild[2]
 98 Parent = [2] Insert data=[7]
 99 ***********TREE View BEGIN***********
100 9 B
101     1 R
102         0 B
103             *
104             &
105         2 B
106             *
107             7 R
108                 *
109                 &
110     12 B
111         11 R
112             *
113             &
114         &
115 ***********TREE View END ***********
116 
117 ********end one*************
118 
119 ********begin one*************
120 pos = [14] index =[7] insert_data[19]
121  data=[19] curData=[9] insert R
122 pCurTreeNode->rchild != NULL rchild[12]
123  data=[19] curData=[12] insert R
124 Parent = [12] Insert data=[19]
125 ***********TREE View BEGIN***********
126 9 B
127     1 R
128         0 B
129             *
130             &
131         2 B
132             *
133             7 R
134                 *
135                 &
136     12 B
137         11 R
138             *
139             &
140         19 R
141             *
142             &
143 ***********TREE View END ***********
144 
145 ********end one*************
146 
147 ********begin one*************
148 pos = [13] index =[8] insert_data[4]
149  data=[4] curData=[9] insert L
150  data=[4] curData=[1] insert R
151 pCurTreeNode->rchild != NULL rchild[2]
152  data=[4] curData=[2] insert R
153 pCurTreeNode->rchild != NULL rchild[7]
154 Parent = [7] Insert data=[4]
155 ***********TREE View BEGIN***********
156 9 B
157     1 R
158         0 B
159             *
160             &
161         4 B
162             2 R
163                 *
164                 &
165             7 R
166                 *
167                 &
168     12 B
169         11 R
170             *
171             &
172         19 R
173             *
174             &
175 ***********TREE View END ***********
176 
177 ********end one*************
178 
179 ********begin one*************
180 pos = [12] index =[9] insert_data[15]
181  data=[15] curData=[9] insert R
182 pCurTreeNode->rchild != NULL rchild[12]
183  data=[15] curData=[12] insert R
184 pCurTreeNode->rchild != NULL rchild[19]
185 Parent = [19] Insert data=[15]
186 ***********TREE View BEGIN***********
187 9 B
188     1 R
189         0 B
190             *
191             &
192         4 B
193             2 R
194                 *
195                 &
196             7 R
197                 *
198                 &
199     12 R
200         11 B
201             *
202             &
203         19 B
204             15 R
205                 *
206                 &
207             &
208 ***********TREE View END ***********
209 
210 ********end one*************
211 
212 ********begin one*************
213 pos = [11] index =[10] insert_data[18]
214  data=[18] curData=[9] insert R
215 pCurTreeNode->rchild != NULL rchild[12]
216  data=[18] curData=[12] insert R
217 pCurTreeNode->rchild != NULL rchild[19]
218  data=[18] curData=[19] insert L
219 Parent = [15] Insert data=[18]
220 ***********TREE View BEGIN***********
221 9 B
222     1 R
223         0 B
224             *
225             &
226         4 B
227             2 R
228                 *
229                 &
230             7 R
231                 *
232                 &
233     12 R
234         11 B
235             *
236             &
237         18 B
238             15 R
239                 *
240                 &
241             19 R
242                 *
243                 &
244 ***********TREE View END ***********
245 
246 ********end one*************
247 
248 ********begin one*************
249 pos = [10] index =[11] insert_data[5]
250  data=[5] curData=[9] insert L
251  data=[5] curData=[1] insert R
252 pCurTreeNode->rchild != NULL rchild[4]
253  data=[5] curData=[4] insert R
254 pCurTreeNode->rchild != NULL rchild[7]
255 Parent = [7] Insert data=[5]
256 ***********TREE View BEGIN***********
257 9 B
258     1 B
259         0 B
260             *
261             &
262         4 R
263             2 B
264                 *
265                 &
266             7 B
267                 5 R
268                     *
269                     &
270                 &
271     12 B
272         11 B
273             *
274             &
275         18 B
276             15 R
277                 *
278                 &
279             19 R
280                 *
281                 &
282 ***********TREE View END ***********
283 
284 ********end one*************
285 
286 ********begin one*************
287 pos = [9] index =[12] insert_data[14]
288  data=[14] curData=[9] insert R
289 pCurTreeNode->rchild != NULL rchild[12]
290  data=[14] curData=[12] insert R
291 pCurTreeNode->rchild != NULL rchild[18]
292  data=[14] curData=[18] insert L
293 Parent = [15] Insert data=[14]
294 ***********TREE View BEGIN***********
295 9 B
296     1 B
297         0 B
298             *
299             &
300         4 R
301             2 B
302                 *
303                 &
304             7 B
305                 5 R
306                     *
307                     &
308                 &
309     12 B
310         11 B
311             *
312             &
313         18 R
314             15 B
315                 14 R
316                     *
317                     &
318                 &
319             19 B
320                 *
321                 &
322 ***********TREE View END ***********
323 
324 ********end one*************
325 
326 ********begin one*************
327 pos = [8] index =[13] insert_data[13]
328  data=[13] curData=[9] insert R
329 pCurTreeNode->rchild != NULL rchild[12]
330  data=[13] curData=[12] insert R
331 pCurTreeNode->rchild != NULL rchild[18]
332  data=[13] curData=[18] insert L
333  data=[13] curData=[15] insert L
334 Parent = [14] Insert data=[13]
335 ***********TREE View BEGIN***********
336 9 B
337     1 B
338         0 B
339             *
340             &
341         4 R
342             2 B
343                 *
344                 &
345             7 B
346                 5 R
347                     *
348                     &
349                 &
350     12 B
351         11 B
352             *
353             &
354         18 R
355             14 B
356                 13 R
357                     *
358                     &
359                 15 R
360                     *
361                     &
362             19 B
363                 *
364                 &
365 ***********TREE View END ***********
366 
367 ********end one*************
368 
369 ********begin one*************
370 pos = [7] index =[14] insert_data[10]
371  data=[10] curData=[9] insert R
372 pCurTreeNode->rchild != NULL rchild[12]
373  data=[10] curData=[12] insert L
374 Parent = [11] Insert data=[10]
375 ***********TREE View BEGIN***********
376 9 B
377     1 B
378         0 B
379             *
380             &
381         4 R
382             2 B
383                 *
384                 &
385             7 B
386                 5 R
387                     *
388                     &
389                 &
390     12 B
391         11 B
392             10 R
393                 *
394                 &
395             &
396         18 R
397             14 B
398                 13 R
399                     *
400                     &
401                 15 R
402                     *
403                     &
404             19 B
405                 *
406                 &
407 ***********TREE View END ***********
408 
409 ********end one*************
410 
411 ********begin one*************
412 pos = [6] index =[15] insert_data[16]
413  data=[16] curData=[9] insert R
414 pCurTreeNode->rchild != NULL rchild[12]
415  data=[16] curData=[12] insert R
416 pCurTreeNode->rchild != NULL rchild[18]
417  data=[16] curData=[18] insert L
418  data=[16] curData=[14] insert R
419 pCurTreeNode->rchild != NULL rchild[15]
420 Parent = [15] Insert data=[16]
421 ***********TREE View BEGIN***********
422 9 B
423     1 B
424         0 B
425             *
426             &
427         4 R
428             2 B
429                 *
430                 &
431             7 B
432                 5 R
433                     *
434                     &
435                 &
436     12 R
437         11 B
438             10 R
439                 *
440                 &
441             &
442         18 B
443             14 R
444                 13 B
445                     *
446                     &
447                 15 B
448                     *
449                     16 R
450                         *
451                         &
452             19 B
453                 *
454                 &
455 ***********TREE View END ***********
456 
457 ********end one*************
458 
459 ********begin one*************
460 pos = [5] index =[16] insert_data[6]
461  data=[6] curData=[9] insert L
462  data=[6] curData=[1] insert R
463 pCurTreeNode->rchild != NULL rchild[4]
464  data=[6] curData=[4] insert R
465 pCurTreeNode->rchild != NULL rchild[7]
466  data=[6] curData=[7] insert L
467 Parent = [5] Insert data=[6]
468 ***********TREE View BEGIN***********
469 9 B
470     1 B
471         0 B
472             *
473             &
474         4 R
475             2 B
476                 *
477                 &
478             6 B
479                 5 R
480                     *
481                     &
482                 7 R
483                     *
484                     &
485     12 R
486         11 B
487             10 R
488                 *
489                 &
490             &
491         18 B
492             14 R
493                 13 B
494                     *
495                     &
496                 15 B
497                     *
498                     16 R
499                         *
500                         &
501             19 B
502                 *
503                 &
504 ***********TREE View END ***********
505 
506 ********end one*************
507 
508 ********begin one*************
509 pos = [4] index =[17] insert_data[3]
510  data=[3] curData=[9] insert L
511  data=[3] curData=[1] insert R
512 pCurTreeNode->rchild != NULL rchild[4]
513  data=[3] curData=[4] insert L
514 Parent = [2] Insert data=[3]
515 ***********TREE View BEGIN***********
516 9 B
517     1 B
518         0 B
519             *
520             &
521         4 R
522             2 B
523                 *
524                 3 R
525                     *
526                     &
527             6 B
528                 5 R
529                     *
530                     &
531                 7 R
532                     *
533                     &
534     12 R
535         11 B
536             10 R
537                 *
538                 &
539             &
540         18 B
541             14 R
542                 13 B
543                     *
544                     &
545                 15 B
546                     *
547                     16 R
548                         *
549                         &
550             19 B
551                 *
552                 &
553 ***********TREE View END ***********
554 
555 ********end one*************
556 
557 ********begin one*************
558 pos = [3] index =[18] insert_data[8]
559  data=[8] curData=[9] insert L
560  data=[8] curData=[1] insert R
561 pCurTreeNode->rchild != NULL rchild[4]
562  data=[8] curData=[4] insert R
563 pCurTreeNode->rchild != NULL rchild[6]
564  data=[8] curData=[6] insert R
565 pCurTreeNode->rchild != NULL rchild[7]
566 Parent = [7] Insert data=[8]
567 ***********TREE View BEGIN***********
568 9 B
569     1 R
570         0 B
571             *
572             &
573         4 B
574             2 B
575                 *
576                 3 R
577                     *
578                     &
579             6 R
580                 5 B
581                     *
582                     &
583                 7 B
584                     *
585                     8 R
586                         *
587                         &
588     12 R
589         11 B
590             10 R
591                 *
592                 &
593             &
594         18 B
595             14 R
596                 13 B
597                     *
598                     &
599                 15 B
600                     *
601                     16 R
602                         *
603                         &
604             19 B
605                 *
606                 &
607 ***********TREE View END ***********
608 
609 ********end one*************
610 
611 ********begin one*************
612 pos = [2] index =[19] insert_data[17]
613  data=[17] curData=[9] insert R
614 pCurTreeNode->rchild != NULL rchild[12]
615  data=[17] curData=[12] insert R
616 pCurTreeNode->rchild != NULL rchild[18]
617  data=[17] curData=[18] insert L
618  data=[17] curData=[14] insert R
619 pCurTreeNode->rchild != NULL rchild[15]
620  data=[17] curData=[15] insert R
621 pCurTreeNode->rchild != NULL rchild[16]
622 Parent = [16] Insert data=[17]
623 ***********TREE View BEGIN***********
624 9 B
625     1 R
626         0 B
627             *
628             &
629         4 B
630             2 B
631                 *
632                 3 R
633                     *
634                     &
635             6 R
636                 5 B
637                     *
638                     &
639                 7 B
640                     *
641                     8 R
642                         *
643                         &
644     12 R
645         11 B
646             10 R
647                 *
648                 &
649             &
650         18 B
651             14 R
652                 13 B
653                     *
654                     &
655                 16 B
656                     15 R
657                         *
658                         &
659                     17 R
660                         *
661                         &
662             19 B
663                 *
664                 &
665 ***********TREE View END ***********
666 
667 ********end one*************
668 
669 ********pRBTree data 9*************
670 
671 ------------------init Tree begin-------------
672 ***********TREE View BEGIN***********
673 9 B
674     1 R
675         0 B
676             *
677             &
678         4 B
679             2 B
680                 *
681                 3 R
682                     *
683                     &
684             6 R
685                 5 B
686                     *
687                     &
688                 7 B
689                     *
690                     8 R
691                         *
692                         &
693     12 R
694         11 B
695             10 R
696                 *
697                 &
698             &
699         18 B
700             14 R
701                 13 B
702                     *
703                     &
704                 16 B
705                     15 R
706                         *
707                         &
708                     17 R
709                         *
710                         &
711             19 B
712                 *
713                 &
714 ***********TREE View END ***********
715 
716 ------------------init Tree end-------------
run_result

删除节点估计要等光棍节后才能写。o(^▽^)o




原文地址:https://www.cnblogs.com/ashen/p/6049466.html