完整代码:
#include<iostream>
using namespace std;
typedef struct Tnode {
int data;
struct Tnode* lchild, * rchild;
int ltag = 0;
int rtag = 0;
}*Tree;
void creatTree(Tree &T)
{
T = new Tnode;
T->data = 1;
Tree p1 = new Tnode;
Tree p2 = new Tnode;
Tree p3 = new Tnode;
Tree p4 = new Tnode;
Tree p5 = new Tnode;
p1->data = 2;
p2->data = 3;
p3->data = 4;
p4->data = 5;
p5->data = 6;
T->lchild = p1;
T->rchild = p2;
p1->lchild = p3;
p1->rchild = p4;
p2->lchild = p5;
p2->rchild = NULL;
p3->lchild = NULL;
p3->rchild = NULL;
p4->lchild = NULL;
p4->rchild = NULL;
p5->lchild = NULL;
p5->rchild = NULL;
}
void InThread(Tree &p,Tree &pre) {
if (p != NULL)
{
InThread(p->lchild, pre);
if (p->lchild == NULL)
{
p->lchild = pre;
p->ltag = 1;
}
if (pre != NULL && pre->rchild == NULL)
{
pre->rchild = p;
pre->rtag = 1;
}
pre = p;
InThread(p->rchild, pre);
}
}
void createIn(Tree T) {
Tree pre = NULL;
if (T != NULL)
{
InThread(T, pre);
pre->rchild = NULL;
pre->rtag = 1;
}
}
void visitTree(Tree &T) {
while (T->ltag == 0) T = T->lchild;
cout << T->data<<" ";
}
void midvi(Tree T)
{
if (T != NULL)
{
midvi(T->lchild);
if(T->ltag == 1) cout << T->data << " ";
midvi(T->rchild);
}
}
int main() {
Tree T;
creatTree(T);
createIn(T);
//midvi(T);
Tree p = new Tnode;
p = T;
visitTree(p);
return 0;
}