码迷,mamicode.com
首页 > 编程语言 > 详细

C++中序线索化二叉树

时间:2015-05-05 23:32:13      阅读:272      评论:0      收藏:0      [点我收藏+]

标签:

  1 #include <iostream>
  2 using namespace std;
  3 
  4 typedef struct TBTNode
  5 {
  6     char data;
  7     int ltag,rtag;
  8     struct TBTNode * lchild;
  9     struct TBTNode * rchild;
 10 }TBTNode;
 11 
 12 TBTNode * initTBTNode()
 13 {
 14     TBTNode * p=(TBTNode*)malloc(sizeof(TBTNode));
 15     p->lchild=0;
 16     p->rchild=0;
 17     p->ltag=0;
 18     p->rtag=0;
 19     return p;
 20 }
 21 
 22 TBTNode * initTBTree(TBTNode * p)
 23 {
 24     TBTNode * A=initTBTNode();
 25     TBTNode * B=initTBTNode();
 26     TBTNode * C=initTBTNode();
 27     TBTNode * D=initTBTNode();
 28     TBTNode * E=initTBTNode();
 29 
 30     A->data=A;
 31     B->data=B;
 32     C->data=C;
 33     D->data=D;
 34     E->data=E;
 35 
 36     A->lchild=B;
 37     A->rchild=C;
 38     B->rchild=D;
 39     C->lchild=E;
 40 
 41     p=A;
 42 
 43     return p;
 44 }
 45 
 46 void InThread(TBTNode *p,TBTNode *&pre)
 47 {
 48     if(p!=0)
 49     {
 50         InThread(p->lchild,pre);
 51         if(p->lchild==0)
 52         {
 53             p->lchild=pre;
 54             p->ltag=1;
 55         }
 56         if(pre!=0&&pre->rchild==0)
 57         {
 58             pre->rchild=p;
 59             pre->rtag=1;
 60         }
 61         pre=p;
 62         InThread(p->rchild,pre);
 63     }
 64 }
 65 
 66 TBTNode * First(TBTNode * p)
 67 {
 68     while(p->ltag==0)
 69         p=p->lchild;
 70     return p;
 71 }
 72 
 73 TBTNode * Next(TBTNode * p)
 74 {
 75     if(p->rtag==0)
 76         return First(p->rchild);
 77     else
 78         return p->rchild;
 79 }
 80 
 81 void Inorder(TBTNode * root)
 82 {
 83     for(TBTNode *p=First(root);p!=0;p=Next(p))
 84         cout << p->data << " ";
 85     cout << endl;
 86 }
 87 
 88 void createInThread(TBTNode * root)
 89 {
 90     TBTNode * pre =initTBTNode();
 91     if(root!=0)
 92     {
 93         InThread(root,pre);
 94         pre->rchild=0;
 95         pre->rtag=1;
 96     }
 97 }
 98 
 99 int main(int argc, char* argv[])
100 {
101     TBTNode *p=initTBTNode();
102     p=initTBTree(p);
103     TBTNode *pre=initTBTNode();
104     createInThread(p);
105     Inorder(p);
106     return 0;
107 }


 

C++中序线索化二叉树

标签:

原文地址:http://www.cnblogs.com/xxdfly/p/4480308.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!