zoukankan      html  css  js  c++  java
  • P1827 [USACO3.4]美国血统 American Heritage

    P1827 [USACO3.4]美国血统 American Heritage

    题目描述

    农夫约翰非常认真地对待他的奶牛们的血统。然而他不是一个真正优秀的记帐员。他把他的奶牛 们的家谱作成二叉树,并且把二叉树以更线性的“树的中序遍历”和“树的前序遍历”的符号加以记录而 不是用图形的方法。

    你的任务是在被给予奶牛家谱的“树中序遍历”和“树前序遍历”的符号后,创建奶牛家谱的“树的 后序遍历”的符号。每一头奶牛的姓名被译为一个唯一的字母。(你可能已经知道你可以在知道树的两 种遍历以后可以经常地重建这棵树。)显然,这里的树不会有多于 26 个的顶点。 这是在样例输入和 样例输出中的树的图形表达方式:

             C
             /  
            /  
           B    G
          /   /
           A   D  H
            / 
           E   F
    

    树的中序遍历是按照左子树,根,右子树的顺序访问节点。

    树的前序遍历是按照根,左子树,右子树的顺序访问节点。

    树的后序遍历是按照左子树,右子树,根的顺序访问节点。

    输入格式

    第一行: 树的中序遍历

    第二行: 同样的树的前序遍历

    输出格式

    单独的一行表示该树的后序遍历。

    输入输出样例

    输入 #1复制

    ABEDFCHG
    CBADEFGH 
    

    输出 #1复制

    AEFDBHGC
    

    说明/提示

    题目翻译来自NOCOW。

    USACO Training Section 3.4

    这题考察了前序中序转后序,我们对中序进行划分即可。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    char pre[30], in[30], post[30], post_i = 0;
    void dfs(int root, int start, int end) {
        if(start > end) return;
        int i = start;
        while(i < end && pre[root] != in[i]) i++;
        dfs(root + 1, start, i - 1);
        dfs(root + 1 + (i - start), i + 1, end);
        post[post_i++] = in[i];
    }
    int main() {
        scanf("%s%s", in, pre);
        dfs(0, 0, strlen(pre) - 1);
        printf("%s", post);
        return 0;
    }
    
  • 相关阅读:
    将vue文件script代码抽取到单独的js文件
    git pull 提示错误:Your local changes to the following files would be overwritten by merge
    vue和uniapp 配置项目基础路径
    XAMPP Access forbidden! Access to the requested directory is only available from the local network.
    postman与newman集成
    postman生成代码段
    Curl命令
    POST方法的Content-type类型
    Selenium Grid 并行的Web测试
    pytorch转ONNX以及TnesorRT的坑
  • 原文地址:https://www.cnblogs.com/littlepage/p/13051672.html
Copyright © 2011-2022 走看看