九度 oj 1078

来源:互联网 发布:linux修改系统时间指令 编辑:程序博客网 时间:2024/05/29 17:27
题目描述:

二叉树的前序、中序、后序遍历的定义:
前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树;
中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树;
后序遍历:对任一子树,先遍历其左子树,然后遍历其右子树,最后访问根。
给定一棵二叉树的前序遍历和中序遍历,求其后序遍历(提示:给定前序遍历与中序遍历能够唯一确定后序遍历)。

输入:

两个字符串,其长度n均小于等于26。
第一行为前序遍历,第二行为中序遍历。
二叉树中的结点名称以大写字母表示:A,B,C....最多26个结点。

输出:

输入样例可能有多组,对于每组测试样例,
输出一行,为后序遍历的字符串。

样例输入:
ABCBACFDXEAGXDEFAG
样例输出:
BCA

XEDGAF

#include<stdio.h>#include<string.h>struct node{       node *lchild;       node *rchild;       char c;       }tree[50];       int loc;       node *creat()       {            tree[loc].lchild=tree[loc].rchild=NULL;            return &tree[loc++];            }            char str1[30],str2[30];            void postorder(node *T)            {                 if(T->lchild!=NULL)                 {                                    postorder(T->lchild);                                    }                                    if(T->rchild!=NULL)                                    {                                                       postorder(T->rchild);                                                       }                                                       printf("%c",T->c);                                                       }                                                       node *build(int s1,int e1,int s2,int e2)                                                       {                                                           node *ret=creat();                                                           ret->c=str1[s1];                                                           int rootldx;                                                           for(int i=s2;i<=e2;i++)                                                           {                                                           if(str2[i]==str1[s1])                                                           {                                                                                rootldx=i;                                                                                break;                                                                                }                                                                                }                                                                                if(rootldx!=s2)                                                                                {                                                                                               ret->lchild=build(s1+1,s1+(rootldx-s2),s2,rootldx-1);                                                                                               }                                                                                               if(rootldx!=e2)                                                                                               {                                                                                                              ret->rchild=build(s1+(rootldx-s2)+1,e1,rootldx+1,e2);                                                                                                              }                                                                                                              return ret;                                                                                                              }                                                                                                              int main()                                                                                                              {                                                                                                                  while(scanf("%s",str1)!=EOF)                                                                                                                  {                                                                                                                                              scanf("%s",str2);                                                                                                                                              loc=0;                                                                                                                                              int L1=strlen(str1);                                                                                                                                              int L2=strlen(str2);                                                                                                                                              node *T=build(0,L1-1,0,L2-1);                                                                                                                                              postorder(T);                                                                                                                                              printf("\n");                                                                                                                                              }                                                                                                                                              }                                                                                                                                                                                                                                                                                                                                                                                                                 


0 0
原创粉丝点击