1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef int ElemType; 4 5 typedef struct ThrNode{ 6 ElemType data; 7 ThrNode* lson; 8 ThrNode* rson; 9 int ltag; 10 int rtag; 11 ThrNode(ElemType data, ThrNode* lson, ThrNode* rson) { 12 this->ltag=0; 13 this->rtag=0; 14 this->data = data; 15 this->lson = lson; 16 this->rson = rson; 17 } 18 }*ThrTree; 19 20 void inThread(ThrTree &p,ThrTree &pre){ 21 if(p){ 22 //printf("%d ",p->data); 23 inThread(p->lson,pre); 24 if(p->ltag){ 25 p->ltag=1; 26 p->lson=pre; 27 } 28 if(pre&&!pre->rtag){ 29 pre->rtag=1; 30 pre->rson=p; 31 } 32 pre=p; 33 inThread(p->rson,pre); 34 } 35 } 36 37 void dfs(ThrTree T){ 38 if(T){ 39 printf("%d ",T->data); 40 dfs(T->rson); 41 } 42 } 43 44 45 int main(){ 46 ThrNode* v7 = new ThrNode(7, NULL, NULL); 47 ThrNode* v1 = new ThrNode(1, NULL, NULL); 48 ThrNode* v3 = new ThrNode(3, NULL, NULL); 49 ThrNode* v2 = new ThrNode(2, v1, v3); 50 ThrNode* v5 = new ThrNode(5, NULL, NULL); 51 ThrNode* v6 = new ThrNode(6, v5, v7); 52 ThrNode* v4 = new ThrNode(4, v2, v6); 53 54 ThrTree T=v4,pre=NULL; 55 ThrTree p=T; 56 p=p->lson; 57 printf("%d ",p->data); 58 inThread(T,pre); 59 p=T; 60 p=p->lson; 61 printf("%d ",p->data); 62 p=p->lson; 63 //dfs(p); 64 //printf("%d",get_kth_number(T,4)); 65 }