usaco3.4.1 American Heritage

P1827 [USACO3.4]美国血统 American Heritage 【二叉树】 题目描述 农夫约翰非常认真地对待他的奶牛们的血统。然而他不是一个真正优秀的记帐员。他把他的奶牛 们的家谱作成二叉树,并且把二叉树以更线性的“树的中序遍历”和“树的前序遍历”的符号加以记录而 不是用图形的方法。 你的任务是在被给予奶牛家谱的“树中序遍历”和“树前序遍历”的符号后,创建奶牛家谱的“树的 后序遍历”的符号。每一头奶牛的姓名被译为一个唯一的字母。(你可能已经知道你可以在知道树的两 种遍历以后可以经常地重建这棵树。)显然,这里的树不会有多于 26 个的顶点。 这是在样例输入和 样例输出中的树的图形表达 阅读详情

一 原题

American Heritage

Farmer John takes the heritage of his cows very seriously. He is not, however, a truly fine bookkeeper. He keeps his cow genealogies as binary trees and, instead of writing them in graphic form, he records them in the more linear `tree in-order' and `tree pre-order' notations.

Your job is to create the `tree post-order' notation of a cow's heritage after being given the in-order and pre-order notations. Each cow name is encoded as a unique letter. (You may already know that you can frequently reconstruct a tree from any two of the ordered traversals.) Obviously, the trees will have no more than 26 nodes.

Here is a graphical representation of the tree used in the sample input and output:

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

The in-order traversal of this tree prints the left sub-tree, the root, and the right sub-tree.

The pre-order traversal of this tree prints the root, the left sub-tree, and the right sub-tree.

The post-order traversal of this tree print the left sub-tree, the right sub-tree, and the root.

PROGRAM NAME: heritage

INPUT FORMAT

Line 1:The in-order representation of a tree.
Line 2:The pre-order representation of that same tree.

SAMPLE INPUT (file heritage.in)

ABEDFCHG
CBADEFGH

OUTPUT FORMAT

A single line with the post-order representation of the tree.

SAMPLE OUTPUT (file heritage.out)

AEFDBHGC 


二 分析

给定二叉树的前序遍历和中序遍历,求后序遍历。


三 代码

运行结果:
USER: Qi Shen [maxkibb3]
TASK: heritage
LANG: C++

Compiling...
Compile: OK

Executing...
   Test 1: TEST OK [0.000 secs, 4188 KB]
   Test 2: TEST OK [0.000 secs, 4188 KB]
   Test 3: TEST OK [0.000 secs, 4188 KB]
   Test 4: TEST OK [0.000 secs, 4188 KB]
   Test 5: TEST OK [0.000 secs, 4188 KB]
   Test 6: TEST OK [0.000 secs, 4188 KB]
   Test 7: TEST OK [0.000 secs, 4188 KB]
   Test 8: TEST OK [0.000 secs, 4188 KB]
   Test 9: TEST OK [0.000 secs, 4188 KB]

All tests OK.

YOUR PROGRAM ('heritage') WORKED FIRST TIME! That's fantastic -- and a rare thing. Please accept these special automated congratulations.


AC代码:
/*
ID:maxkibb3
LANG:C++
PROB:heritage
*/

#include<iostream>
#include<fstream>
using namespace std;

string in, pre, post;
ifstream fin;
ofstream fout;
int pre_idx;

struct Node {
    char val;
    Node *left, *right;
};

Node *build_tree(int l, int r) {
    if(l > r) return NULL;
    Node *root = new Node();
    pre_idx++;
    int in_idx = in.find(pre[pre_idx]);
    root->val = pre[pre_idx];
    if(l != r) {
        root->left = build_tree(l, in_idx - 1);
        root->right = build_tree(in_idx + 1, r);
    }
    return root;
}

void post_dfs(Node *node) {
    if(!node) return;
    post_dfs(node->left);
    post_dfs(node->right);
    fout << node->val;
}

int main() {
    fin.open("heritage.in");
    fout.open("heritage.out");

    fin >> in >> pre;

    pre_idx = -1;
    Node *root = build_tree(0, in.length() - 1);
    post_dfs(root);
    fout << endl;
    delete root;

    fin.close();
    fout.close();
}


【USACO题库】3.4.2 American Heritage美国血统 题目大意: 根据一颗树的中序遍历和前序遍历求出这棵树的后序遍历。 样例输入: ABEDFCHG CBADEFGH 样例输出: AEFDBHGC 这道题我先讲一下自己的建树方法: 我们知道一颗树的中序遍历,前序遍历,后序遍历的顺序是这样子的: 左根右 根左右 左右根 所以我们可以根据前序遍历找出当前这颗树的根。例如样例中,这颗树的根是C,则这颗树的 阅读详情

相关推荐

1057. 【USACO题库】3.4.2 American Heritage美国血统

题目描述 农夫约翰非常认真地对待他的奶牛们的血统。然而他不是一个真正优秀的记帐员。他把他的奶牛们的家谱作成二叉树,并且把二叉树以更线性的”树的中序遍历“和”树的前序遍历“的符号加以记录而不是用图形的方法。 你的任务是在被给予奶牛家谱的”树中序遍历“和”树前序遍历“的符号后,创建奶牛家谱的”树的后序遍历“的符号。每一头奶牛的姓名被 译为一个唯一的字母。(你可能已经知道你可以在知道树的两种遍历以后可以经常地重建这棵树。)显然,这里的树不会有多余26个的顶点。

wrnxrxsb的博客 919

洛谷——P1827 美国血统 American Heritage

你的任务是在被给予奶牛家谱的“树中序遍历”和“树前序遍历”的符号后,创建奶牛家谱的“树的 后序遍历”的符号。他把他的奶牛 们的家谱作成二叉树,并且把二叉树以更线性的“树的中序遍历”和“树的前序遍历”的符号加以记录而 不是用图形的方法。做这个题首先要了解:前序遍历、中序遍历和后序遍历, 前中后指的是:根结点在左子树和右子树之间的位置。树的中序遍历是按照左子树,根,右子树的顺序访问节点。树的前序遍历是按照根,左子树,右子树的顺序访问节点。树的后序遍历是按照左子树,右子树,根的顺序访问节点。

明里灰的博客 475

ESXI 8.0虚拟机安装OpenWRT软路由详细教程

OpenWrt 是嵌入式的 Linux 路由器固件,OpenWrt在稳定运行的同时提供了强大的扩展能力,用户可以完全的定制属于自己的路由系统,满足不一样的个性化需求,本文讲解如何使用ESXI安装OpenWRT,打造属于自己的软路由。本次安装使用的是版本。默认登录信息:用户:root密码:password下载固件:https://github.com/haiibo/OpenWrt/releases/tag/X86_64【CPU配置】:4核心。

qq_27121281的博客 3915

【题解】American Heritage美国血统

题目描述:农夫约翰非常认真地对待他的奶牛们的血统。然而他不是一个真正优秀的记帐员。他把他的奶牛们的家谱作成二叉树,并且把二叉树以更线性的“树的中序遍历”和“树的前序遍历”的符号加以记录而不是用图形的方法。 你的任务是在被给予奶牛家谱的“树中序遍历”和“树前序遍历”的符号后,创建奶牛家谱的“树的后序遍历”的符号。每一头奶牛的姓名被译为一个唯一的字母。(你可能已经知道你可以在知道树的两种遍历以后可以经...

鹭天 1584

细聊Oracle通过ODBC数据源连接SQL Server数据库

    类似文章搜索引擎上有很多,内容大致相同,今天所谓细聊是因为我在借鉴这些文章时候走了些弯路,所以写此文,为自己备忘,同时如果能为初涉此处知识点的小伙伴提供些帮助就更好了,废话不多说。    我的应用场景:    项目系统使用oracle数据库,与客户的第三方系统供应商实现资源共享,对方为sql server数据库;    我的测试开发环境为64bitwin7PC机,本机上装有64位Oracl...

xueren_83的博客 1万+

嵌入式开发面试题全解析:指针、内存、数据类型关键问题总结

本文对嵌入式开发典型面试题进行深度解析,涵盖多方面关键知识。题目 19 揭示字符指针修改字符串常量的错误操作;题目 20 展现strcpy引发的缓冲区溢出风险;题目 21 体现未初始化数组与strlen结合的不可预测性;题目 22 通过位域与对齐规则计算结构体大小;题目 23 因unsigned char溢出导致循环异常。这些题目全面覆盖指针操作、内存管理、数据类型特性等核心内容,精准指出开发中易疏忽的陷阱,有助于理解编程规范,规避风险,提升代码质量与稳定性,是深入掌握嵌入式开发要点的实用指南。

嵌入式中手 1364

【洛谷P1827】【USACO】 美国血统 American Heritage 由二叉树两个序列求第三个序列...

P1827 美国血统 American Heritage 题目描述 农夫约翰非常认真地对待他的奶牛们的血统。然而他不是一个真正优秀的记帐员。他把他的奶牛 们的家谱作成二叉树,并且把二叉树以更线性的“树的中序遍历”和“树的前序遍历”的符号加以记录而 不是用图形的方法。 你的任务是在被给予奶牛家谱的“树中序遍历”和“树前序遍历”的符号后,创建奶牛家谱的“树的 后序遍...

weixin_30616969的博客 355

从格雷码到多频外差:结构光相位展开实战指南(附Python仿真代码)

本文深入探讨了结构光三维测量中的相位展开技术,重点对比了格雷码和多频外差法在工业检测、逆向工程等领域的应用。通过详细的原理图解和Python仿真代码,展示了两种方法在精度、抗噪性和适用场景上的差异,为实际工程中的技术选型提供实用指南。

weixin_42535703的博客 435

还原二叉树

根据二叉树的先序遍历(根结点,左子树,右子树)我可以知道 A 是根结点,再在中序序列中找到根结点,进行分割,中序遍历(左子树,根结点,右子树),找到根节点后,可以按照这个遍历顺序,找到左子树的部分和右子树的部分。再依据左子树的个数和右子树的结点个数,划分先序序列的左子树和右子树,输出的时候以后序遍历的顺序输出(左子树,右子树,根结点)。他把他的奶牛 们的家谱作成二叉树,并且把二叉树以更线性的“树的中序遍历”和“树的前序遍历”的符号加以记录而 不是用图形的方法。第二行: 同样的树的前序遍历。

monlyy的博客 498

十、强势股的起爆点:第三类买点的实战精解

本文深入解析强势股交易中的第三类买点(三买)实战技巧,涵盖两种经典模式:突破首个中枢后的回踩和底部反转后的直接脱离下跌中枢。通过详细案例和数据分析,揭示三买在捕捉主升浪起爆点时的黄金信号作用,帮助投资者优化风险收益比,提升短线交易成功率。

weixin_30260191的博客 313

巡检类机器人电池容量计算方法论(原理+算法+真实案例)

摘要:本文系统阐述了巡检机器人电池容量的计算方法,重点解析了;能量平衡;核心原理和三种主流算法。通过光伏电站履带式巡检机器人的真实案例,详细演示了从工况拆解、功耗采集到容量计算的完整流程。文章指出:室内轻载场景可采用静态平均功耗法,户外常规工况推荐动态负载积分法,而复杂环境需采用融合估算算法。特别强调需考虑温度修正(冬季容量衰减20%)、冗余系数(1.2-1.5)和放电深度(磷酸铁锂DoD取80%)等关键参数。

start_up_go的博客 243

C++——【USACO 3.4.1】——American Heritage

American Heritage Farmer John takes the heritage of his cows very seriously. He is not, however, a truly fine bookkeeper. He keeps his cow genealogies as binary trees and, instead of writing them

McDonnell_Douglas的博客 533

使用STM32H7点亮RGB屏幕

希望本文能对你有所帮助!RGB屏幕是一种具有红、绿、蓝三种颜色通道的显示设备,通过控制每个通道的亮度,可以显示出丰富多彩的图像和动画。要使用STM32H7控制RGB屏幕,我们需要连接适当的引脚,并编写适当的代码来控制每个颜色通道的亮度。在主循环中,我们先点亮红色通道,然后延迟一段时间,接着点亮绿色通道,再延迟一段时间,最后点亮蓝色通道,并再次延迟。需要注意的是,示例代码中的延迟循环使用了一个简单的计数器实现,但实际应用中可能需要更精确的延迟方式,例如使用定时器中断或操作系统提供的延迟函数。

QoyOle的博客 924

USACO3.4.1 American Heritage (heritage)

已知树的前序,中序遍历,求后序遍历。 中序遍历(in):左-根-右 前序遍历(pre):根-左-右 后序遍历(post):左-右-根 可以发现,整棵树的根,在前序遍历的第一个字符,也是后序遍历的最后一个字符'R'  l1   l2 in:  ----R***   l1  l2 pre: R----***  l1  l2 post:----***R 先把后序遍历

Shion的专栏 478

OMAPL138使用UPP读写测试

UPP测试代码 #include "hw_types.h" // 宏命令 #include "hw_syscfg0_OMAPL138.h" // 系统配置模块寄存器 #include "soc_OMAPL138.h" // DSP C6748 外设寄存器 #include "psc.h" // 电源与睡眠控制宏及设备抽象层函数声明 #include "interrupt.h" // DSP C6748 中断相关应用程序接...

wangjie36的博客 1193

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

USACO3.4.1 American Heritage(heritage)

已知树的前序,中序遍历,求后序遍历 对于前序,直接dfs与中序比较着输出即可即可 中序遍历(in):左-根-右 前序遍历(pre):根-左-右 后序遍历(post):左-右-根 /* ID:xsy97051 LANG:C++ TASK:heritage */ #include #include #include using namespace std; string

xsy_victory的专栏 344

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

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

思路 我们可以根据前序遍历和中序遍历的特点来找出后续遍历,前序遍历的第一个结点就是根节点,然后根据这个根节点去把中序遍历划分为两个集合,左边就是左子树,右边就是右子树。 AC代码 #include<iostream> #include<cstring> #include<algorithm> using namespace std; string preSt...

qq_45249273的博客 1105

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

二叉树的遍历 && [USACO3.4]美国血统 American Heritage && P1030 [NOIP2001 普及组] 求先序排列

AC code [USACO3.4]美国血统 American Heritage 建树后后续遍历 #include<cstdio> #include<iostream> #include<cstring> using namespace std; string ft,mt; struct node{ char l; char r; }t[300]; void lt(int a,int b,int c,int d,char rt){//a----b为先序范围,c.

Geek_J的博客 398

[USACO3.4] 美国血统 American Heritage

深度理解二叉树的前、中、后序遍历

Turing_Sheep的博客 351

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

农夫约翰非常认真地对待他的奶牛们的血统。然而他不是一个真正优秀的记帐员。他把他的奶牛 们的家谱作成二叉树,并且把二叉树以更线性的“树的中序遍历”和“树的前序遍历”的符号加以记录而 不是用图形的方法。你的任务是在被给予奶牛家谱的“树中序遍历”和“树前序遍历”的符号后,创建奶牛家谱的“树的 后序遍历”的符号。每一头奶牛的姓名被译为一个唯一的字母。(你可能已经知道你可以在知道树的两 种遍历以后可以经常地重建这棵树。)显然,这里的树不会有多于 26 个的顶点。

2401_86449430的博客 659

洛谷——P1827 [USACO3.4] 美国血统 American Heritage(二叉树)

你的任务是在被给予奶牛家谱的“树中序遍历”和“树前序遍历”的符号后,创建奶牛家谱的“树的 后序遍历”的符号。每一头奶牛的姓名被译为一个唯一的字母。(你可能已经知道你可以在知道树的两 种遍历以后可以经常地重建这棵树。农夫约翰非常认真地对待他的奶牛们的血统。他把他的奶牛 们的家谱作成二叉树,并且把二叉树以更线性的“树的中序遍历”和“树的前序遍历”的符号加以记录而 不是用图形的方法。第一行一个字符串,表示该树的中序遍历。第二行一个字符串,表示该树的前序遍历。单独的一行表示该树的后序遍历。题目翻译来自NOCOW。

2301_77012063的博客 1700

USACO 3.4 American Heritage

题意: 给出一棵树的中序遍历序列和前序遍历序列,求这棵树的后序遍历序列。 思路: 由前序遍历的第一个元素就是根,在中序遍历划分出左子树和右子树,递归求解。 代码: /* ID: jasison2 LANG: C++ TASK: heritage */ #include #include struct Node { int l, r; Node(): l(-1), r(-1) {}

jasison 402

USACO 3.4 American Heritage (heritage)

/* Main idea: Choose node in pre order, and then use in order info to jude left or right.Througt this we can build a tree. Finally, we wall through the tree in post order to get answer; From this pro

Hello World! 1072

【题解-Acwing】P1827 [USACO3.4] 美国血统 American Heritage

你的任务是在被给予奶牛家谱的“树中序遍历”和“树前序遍历”的符号后,创建奶牛家谱的“树的后序遍历”的符号。每一头奶牛的姓名被译为一个唯一的字母。(你可能已经知道你可以在知道树的两种遍历以后可以经常地重建这棵树。农夫约翰非常认真地对待他的奶牛们的血统。然而他不是一个真正优秀的记帐员。他把他的奶牛们的家谱作成二叉树,并且把二叉树以更线性的“树的中序遍历”和“树的前序遍历”的符号加以记录而不是用图形的方法。第一行一个字符串,表示该树的中序遍历。第二行一个字符串,表示该树的前序遍历。单独的一行表示该树的后序遍历。

写代码的犄角旮瘩 494

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

这道题可以说是很好的一道二叉树入门题,这道题有很多种做法,这里介绍一种最简单的做法,建树的操作 如图所示,先在前序中找到第一个节点C,然后去中序中查找C的位置 我们设前序的序列为Lpre–Rpre 中序为L-mid—R–mid 设找到C的位置为k,那么此时可以用C把左右子树划分,并将C作为树的根节点 左子树的个数为K-L-mid,右子树的个数为R-mid-K; 我们用同样方法将左右子树分别进...

weixin_44077170的博客 793

USACO 3.4 American Heritage 美国血统

题目大意 给出一棵二叉树的中序和前序遍历,求后序遍历。   样例输入&amp;输出 sample input ABEDFCHG CBADEFGH sample output AEFDBHGC   分析&amp;反思 string什么的stl也太暴力了。。。 为了省时间手写我也忍了。。。   前序遍历 PreOrder 根节点+左子树+右子树 中序遍历 InOr...

DWAE86的博客 480
上一篇: usaco3.3.5 A Game
下一篇: usaco3.4.2 Electric Fence
max_kibble
博客等级 码龄11年 2粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值