已知二叉树的先序和中序求后序遍历
来源:互联网 发布:中国的国际形势 知乎 编辑:程序博客网 时间:2024/05/16 09:44
已知二叉树的先序和中序求后序遍历二叉树的遍历算法在其他树操作的基础已知先序和中序求二叉树的后序遍历算法核心是1、从先序遍历中读入根节点2、从中序遍历中找到与根节点相等的元素,以此节点将中序序列分成两个部分,左边的为二叉树的左子树,右边为二叉树的右子树;3、递归调用上述步骤得到根节点的左、右子树 #include <stdio.h>#include <string.h>#define MAXN 55int idx;char pre[MAXN],in[MAXN],post[MAXN];int findpos(char key,char *str,int s,int e){ int i; for(i=s;i<=e;i++) if(key == str[i]) break; return i;}void solve(int ps,int pe,int is,int ie){ if(ps > pe || is > ie) return; if(is == ie) { post[idx++] = in[is]; return; } int k = findpos(pre[ps],in,is,ie); solve(ps+1,ps-is+k , is,k-1); solve(ps-is+k+1,pe , k+1,ie); post[idx++]=pre[ps];}int main(){ #ifndef ONLINE_JUDGE freopen("tdata.txt","r",stdin); #endif while(scanf("%s",pre)!=EOF) { scanf("%s",in); idx=0; solve(0,strlen(pre)-1,0,strlen(in)-1); post[idx]=0; printf("%s\n",post); } return 0;}