XYNUOJ 【2070: 重建二叉树】

题目描述

题目很简单,给你一棵二叉树的后序和中序序列,求出它的前序序列(So easy!)。

输入

输入有多组数据(少于100组),以文件结尾结束。 每组数据仅一行,包括两个字符串,中间用空格隔开,分别表示二叉树的后序和中序序列(字符串长度小于26,输入数据保证合法)。

输出

每组输出数据单独占一行,输出对应得先序序列。

样例输入

ACBFGED ABCDEFG
CDAB CBAD

样例输出

DBACEGF
BCAD

题解:以在中序遍历中寻找根为切入点,把二叉树分为左右两部分,然后把这两部分又分别作为做为一个新的二叉树;

注:后序遍历的最后一个节点总为根节点。。。没说错吧吐舌头

代码:

#include <iostream>
#include<cstring>
#include<cstdio>
using namespace std;
void toPre(char post[],char in[],int len){
    if(len<=0) return;
    int i,n;
    char root=post[len-1];
    for(i=0;i<len;i++){
        if(root==in[i]){
            n=i;
            break;
        }
    }
    cout<<root;
    toPre(post,in,n);//将左子树作为一颗新的二叉树,并在左子树中寻找他的根节点
    toPre(post+n,in+n+1,len-n-1);//将右子树作为一颗新的二叉树,并在右子树中寻找他的根节点
}
int main()
{
    char in[27],post[27];
    while(~scanf("%s%s",post,in)){
        int len=strlen(in);
        toPre(post,in,len);
        printf("\n");
    }
    return 0;
}

posted @ 2018-06-17 16:02  神探小小狄  阅读(167)  评论(0编辑  收藏  举报
【推荐】 程序员网址大全  |  EF CodeFirst  |  百度地图.NET  |  MyNPOI  |  开源  |  我的皮肤  |  ASP.NET MVC4  |  前端提升   |  LINQ   |  WCF   |  EasyUI  | aaronyang 页脚html代码