今天刚写的利用二叉树的中序遍历和前序遍历恢复二叉树,最近用了个新环境,还没整明白debug怎么用,求鉴定对错
#include<stdio.h>
typedef struct data{
char i;
struct data *lchild,*rchild;
}Mydata,*Mylink;
int main()
{
char frontsort[10],midulesort[10],item;
int n,sit[10],i,j,stack1[10],top=-1;
Mylink T=NULL,p=NULL,q,stack2[10];
scanf("%d",&n);
scanf("%c",&item);
for(i=0;i<n;i++)
scanf("%c",&frontsort[i]);
scanf("%c",&item);
for(i=0;i<n;i++)
scanf("%c",&midulesort[i]);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(midulesort[j]==frontsort[i])
break;
}
sit[i]=j;
}
for(i=0;i<n;i++)
{
p=(Mylink)malloc(sizeof(Mydata));
p->i=frontsort[i];
p->lchild=NULL;
p->rchild=NULL;
if(top==-1)
{
if(T==NULL)
T=p;
else
q->rchild=p;
stack1[++top]=sit[i];
stack2[top]=p;
}
else if(sit[i]<stack1[top])
{
stack2[top++]->lchild=p;
stack1[top]=sit[i];
stack2[top]=p;
}
else
{
while(1)
{
q=stack2[top--];
if(top==-1||sit[i]<stack1[top])
break;
}
q->rchild=p;
stack1[++top]=sit[i];
stack2[top]=p;
}
}
p=T;
top=-1;
do{
while(p!=NULL)
{
stack2[++top]=p;
p=p->lchild;
}
p=stack2[top--];
printf("%c\n",p->i);
p=p->rchild;
}while(p!=NULL||top!=-1);
printf("\n");
p=T;
top=-1;
do{
while(p!=NULL)
{
stack2[++top]=p;
printf("%c\n",p->i);
p=p->lchild;
}
p=stack2[top--];
p=p->rchild;
}while(p!=NULL||top!=-1);
return 0;
}
不知道有没有高效一点的算法,想了想递归,似乎太浪费空间了,不知对不对