zoukankan      html  css  js  c++  java
  • 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("
    ");
        }
        return 0;
    }
    

  • 相关阅读:
    JAVA 线程安全与同步机制
    JAVA 多线程
    el-table 宽度自适应bug
    详解迭代器Iterator
    理解基本类型的溢出
    理解classpath
    I/O(一):基础知识
    C++: 智能指针
    C++: 值类别与移动语义基础
    CUDA 架构与编程概述
  • 原文地址:https://www.cnblogs.com/kzbin/p/9205193.html
Copyright © 2011-2022 走看看