//树结构体
typedef struct node{
int data;
struct node *L;
struct node *R;
}*Tree;
//根据后序,中序还原树
Tree hy(int hx[],int zx[],int len)
{//hx:后序 zx:中序 len:长度
Tree T;
int i=0;
if(!len) return NULL;
else
{
T=(Tree)malloc(sizeof(struct node));
T->data=hx[len-1];
while(zx[i]!=hx[len-1]) i++;
T->L=hy(hx,zx,i);
T->R=hy(hx+i,zx+i+1,len-i-1);
}
return T;
}
//根据先序,中序还原树
Tree hy(int xx[],int zx[],int len)
{//xx:先序 zx:中序 len:长度
Tree T;
int i=0;
if(!len) return NULL;
else
{
T=(Tree)malloc(sizeof(struct node));
T->data=xx[0];
while(zx[i]!=xx[0]) i++;
T->L=hy(xx+1,zx,i);
T->R=hy(xx+i+1,zx+i+1,len-i-1);
}
return T;
}
//层序遍历二叉树
void cx(Tree T)
{
queue<Tree> q;
Tree p=T;
if(p!=NULL) //判断树是否为空
{
q.push(p);
while(q.size()!=0)
{
p=q.front();
a[k++]=p->data;//遍历结果在此a数组中,需要自己定义全局变量 int a[size],k=0;
q.pop();
if(p->L!=NULL)
q.push(p->L);
if(p->R!=NULL)
q.push(p->R);
}
}
}
//先序遍历二叉树
void xx(Tree T)
{
if(T!=NULL)
{
a[k++]=T->data;//遍历结果在此a数组中,需要自己定义全局变量 int a[size],k=0;
xx(T->L);
xx(T->R);
}
}
//中序遍历二叉树
void zx(Tree T)
{
if(T!=NULL)
{
zx(T->L);
a[k++]=T->data;//遍历结果在此a数组中,需要自己定义全局变量 int a[size],k=0;
zx(T->R);
}
}
//后序遍历二叉树
void hx(Tree T)
{
if(T!=NULL)
{
hx(T->L);
hx(T->R);
a[k++]=T->data;//遍历结果在此a数组中,需要自己定义全局变量 int a[size],k=0;
}
}