输入二叉树中序和后序,求它的前序(c语言)

来源:百度知道 编辑:UC知道 时间:2024/05/23 17:23:14
#include <stdio.h>
#include <string.h>
char a[10],b[10];
int work(int zi,int zj,int hi,int hj)
{
int i,j,k,fz,fh=hi;
printf("%c",b[hj]);//getchar();
if(zi==zj) return 0;
for (fz=zi;fz<=zj;fz++) if (a[fz]==b[hj])break;
fh=hi+(fz-zi)-1;
work(zi,fz-1,hi,fh);
work(fz+1,zj,fh+1,hj-1);
}
int main()
{
scanf("%s%s",a,b);
work(0,strlen(a)-1,0,strlen(b)-1);
while (1);
return 0;
}

找不到错误:是一个死循环 如何解决
我用的是DEVC++
只有这样才能查看结果
我会犯这样低级得错误码

//有一个小问题,加一句话就行了

#include <stdio.h>
#include <string.h>
char a[10],b[10];

int work(int zi,int zj,int hi,int hj)
{

int i,j,k,fz,fh=hi;
//这句话要加,如果调试的话会发现,有些时候zi是会大于zj的,这个时候要立即返回
if(zi>zj) return 0;
printf("%c",b[hj]);//getchar();
if (zi==zj) return 0;

for (fz=zi;fz<=zj;fz++) if (a[fz]==b[hj])break;
fh=hi+(fz-zi)-1;
//导致zi>zj的原因就是如果 fz=zi的话,那么fz-1就比zi小了
work(zi,fz-1,hi,fh);
work(fz+1,zj,fh+1,hj-1);
}

//这样就OK了

//测试数据
//Sample Input

// ABCDEFG ACBFGED

//Sample Output

// DBACEGF

int main()
{
scanf("%s%s",a,b);
work(0,strlen(a)-1,0,strlen(b)-1);
while (1);
return 0;
}

不好意思 没仔细看
刚刚运行了
成功

只是如果二叉树中有相同元素就无法实现了