百练2255:重建二叉树题解

来源:互联网 发布:javascript表单事件 编辑:程序博客网 时间:2024/06/14 13:31

2255:重建二叉树

  • 查看
  • 提交
  • 统计
  • 提示
  • 提问
总时间限制: 
1000ms 
内存限制: 
65536kB
描述

给定一棵二叉树的前序遍历和中序遍历的结果,求其后序遍历。

输入
输入可能有多组,以EOF结束。
每组输入包含两个字符串,分别为树的前序遍历和中序遍历。每个字符串中只包含大写字母且互不重复。
输出
对于每组输入,用一行来输出它后序遍历结果。
样例输入
DBACEGF ABCDEFGBCAD CBAD
样例输出
ACBFGEDCDAB
提示

以英文题面为准

代码:

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;struct Tree{    char val;    Tree * left, * right;    Tree(char v):val(v),left(NULL),right(NULL){}    };char pre[30],in[30];void buildTree(Tree * &root, int s1,int len1,int s2){    if(len1 > 0){        root = new Tree(pre[s1]);        int j = s2;        while(in[j] != pre[s1]) j++;        buildTree(root->left, s1 + 1, j - s2, s2);        buildTree(root->right, s1+j-s2+1, len1 - j + s2 - 1, j + 1);    }else{        root = NULL;        return ;    }}void postOrder(Tree * root){    if(root != NULL){        postOrder(root->left);        postOrder(root->right);        putchar(root->val);    }}int main(){    while(~scanf("%s%s",pre,in)){        int len = strlen(pre);        Tree * root;        buildTree(root,0,len,0);        postOrder(root);        putchar('\n');    }    return 0;}


原创粉丝点击