标签:
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 }
标签:
原文地址:http://www.cnblogs.com/xxdfly/p/4480308.html