#include<stdio.h>
#include <stdlib.h>
typedef struct BiTNode {
int data;
struct BiTNode *lchild, *rchild;
int ltag,rtag;
}BiTNode ,*BiTree;
BiTNode *pre=NULL;
void free (BiTNode *x){
x->lchild=NULL;
x->rchild=NULL;
x->ltag=0;
x->rtag=0;
}
void visit(BiTNode* t)
{
if(t->lchild==NULL){
t->lchild==pre;
t->ltag=1;
pre=t;
}
if(pre!=NULL&&pre->rchild==NULL)
{
pre->rchild=t;
pre->rtag=1;
pre=t;
}
}
void midorder(BiTree t) //中序遍历
{
if(t!=NULL)
{
midorder(t->lchild);
visit(t);
midorder(t->rchild);
}
}
void preorder(BiTree t) //先序遍历
{
if(t!=NULL)
{
visit(t);
if(t->ltag!=1) //先序会循环要加一个判断条件
preorder(t->lchild);
preorder(t->rchild);
}
}
void rearorder(BiTree t) //中序遍历
{
if(t!=NULL)
{
rearorder(t->lchild);
rearorder(t->rchild);
visit(t);
}
}
int main(){
BiTree a=NULL;
a=(BiTNode *)malloc(sizeof(BiTNode));
a->data=1;
free(a);
BiTNode *b=(BiTNode *)malloc(sizeof(BiTNode));
b->data=2;
a->lchild=b;
free (b) ;
BiTNode *c=(BiTNode *)malloc(sizeof(BiTNode));
c->data=3;
a->rchild=c;
free (c) ;
BiTNode *d=(BiTNode *)malloc(sizeof(BiTNode));
d->data=4;
b->lchild=d;
free (d) ;
BiTNode *e=(BiTNode *)malloc(sizeof(BiTNode));
e->data=5;
b->rchild=e;
free (e) ;
BiTNode *f=(BiTNode *)malloc(sizeof(BiTNode));
f->data=6;
c->lchild=f;
free (f) ;
BiTNode *g=(BiTNode *)malloc(sizeof(BiTNode));
g->data=7;
d->rchild=g;
free (g) ;
midorder(a);
if(pre->rtag==NULL){
pre->rchild==NULL;
pre->rtag=1;
}
return 0;
}