//已知先序、中序求后序 //测试数据: //样例输入: // DBACEGF ABCDEFG // BCAD CBAD //样例输出: // ACBFGED // CDAB #include "stdio.h" #include <string.h> void build(char* prestr,char* instr,char* laststr,int len){ if(len<=0)return; int pos = strchr(instr,prestr[0])-instr; //找到根节点在中序遍历中的位置 build(prestr+1,instr,laststr,pos); //递归构造左子树的后序遍历 build(prestr+pos+1,instr+pos+1,laststr+pos,len-pos-1); //递归构造右字数的后序遍历 laststr[len-1] = prestr[0]; //把根节点添加到后序遍历的后端 } main(){ char pres[10000]; char ins[10000]; char lasts[10000]; while(scanf("%s%s",pres,ins)== 2){ int len = strlen(pres); build(pres,ins,lasts,len); lasts[len]='\0'; printf("%s\n",lasts); } }
已知先序中序,求后序
猜你喜欢
转载自hellojyj.iteye.com/blog/2092182
今日推荐
周排行