重构二叉树
Description
根据输入的二叉树前序和中序遍历序列重构二叉树,输出对应节点的左右子节点。
输入:
第一行是一个整数N(1<=N<=20),表示有多少个测试例子。以下每个测试例子的第一行是本测试例子的二叉树的前序遍历,第二行是中序遍历,第三行首先是一个整数M,表示要求输出结果的数目,以后有M个节点,每个中间由一个空格隔开。
输出:
每行输出一个例子的所有结果,如果其子节点为空则输出字符#,同一例子的不同节点的输出结果之间用一个空格隔开
Sample Input
1
ABCDEF
CBEDFA
3 A B C
Sample Output
B# CD ##
//C++实现
#include<iostream>
using namespace std;
char str1[100],str2[100],s[100];
int c[100],d[100];
typedef struct trees
{
int value;
int k;
};
trees tree[100];
void insert(int cc,int i)
{
if(c[cc]<tree[i].k)
{
if(tree[2*i].value=='#')
{
tree[2*i].value=cc;
tree[2*i].k=c[cc];
d[cc]=2*i;
}
else insert(cc,2*i);
}
else
{
if(tree[2*i+1].value=='#')
{
tree[2*i+1].value=cc;
tree[2*i+1].k=c[cc];
d[cc]=2*i+1;
}
else insert(cc,2*i+1);
}
}
int main()
{
int cases;
cin>>cases;
int lena,lenb;
while(cases--)
{
int n;
scanf("%s %s",str1,str2);
scanf("%d",&n);
lena=strlen(str1);
lenb=strlen(str2);
int i;
for(i=0;i<100;i++)
tree[i].value='#';
for(i=0;i<n;i++)
{
scanf(" %c",&s[i]);
}
for(i=0;i<lenb;i++)
{
c[str2[i]]=i+1;
}
tree[1].value=str1[0];
tree[1].k=c[str1[0]]; //用来比较的,str2中的位置
d[str1[0]]=1; //每个字符的存储位置
for(i=1;i<lena;i++)
insert(str1[i],1);
int k;
for(i=0;i<n;i++)
{
k=d[s[i]];
printf("%c%c ",tree[2*k].value,tree[2*k+1].value);
}
cout<<endl;
}
return 0;
}
分享到:
相关推荐
详细讲述了acm的编程及各种算法知识,书中代码全部用c++实现,对c++泛型编程也有着极大地帮助
这是一道比较经典的剪枝题目,如果不仔细考虑到 题目特性,就不能了解到搜索的速度
这个“基于C++实现的ACM竞赛常用模板”是一个集成了ACM比赛常见问题解决方案的代码库,可以帮助参赛者快速理解和解决各种竞赛题目。 首先,模板通常包括基础数据结构和算法的实现,例如: 1. **排序算法**:快速...
《ACM ICPC程序设计与分析(C++实现)》是一本专为参与ACM国际大学生程序设计竞赛(International Collegiate Programming Contest, 简称ICPC)的参赛者及对此领域感兴趣的程序员编写的指导书籍。书中深入探讨了在...
标题 "ACM杭电1002 C++程序" 指向的是一个与ACM国际大学生程序设计竞赛相关的题目,具体是杭州电子科技大学(Hangzhou Dianzi University)在线评测系统上的第1002号问题。这个问题要求用C++编程语言来解决大数相加...
**基于C++的ACM模板**是用于解决算法竞赛(如国际大学生程序设计竞赛ICPC或ACM/ICPC)中的编程问题的一种高效框架。在这些竞赛中,参赛者需要编写程序来解决各种数学和逻辑问题,速度和准确性是关键。C++语言因其...
### ACM&C++实用技巧与模板库 #### 一、引言 在计算机科学领域,特别是针对ACM(Association for Computing Machinery)竞赛等编程比赛,掌握高效且简洁的编程技巧至关重要。C++作为这类比赛中最常用的语言之一,...
标题中的“poj acm300题 c++源码打包”表明这是一份包含300个在POJ(编程在线判题系统)上已通过的ACM竞赛题目解决方案的压缩文件,语言为C++。ACM,即国际大学生程序设计竞赛(International Collegiate ...
这段代码实现了一个非常简单的初始化函数`InitBTree`,其作用是将传入的二叉树指针`BT`置为`NULL`,表示当前二叉树为空。 #### 二、构建二叉树 `CreateBTree` 创建二叉树是数据结构中最基本也是最重要的操作之一。...
【标题】"北大acm_p1001试题c++版"所指的是一道源自北京大学ACM(国际大学生程序设计竞赛)的编程题目,它使用C++语言编写。ACM竞赛是全球知名的大学生编程比赛,旨在提升参赛者的算法设计、问题解决以及编程能力。...
基于C++实现的ACM-ACM竞赛常用模板文件 在ACM(国际大学生程序设计竞赛,International Collegiate Programming Contest)中,参赛团队需要使用编程语言解决一系列算法问题。C++作为一门强大的编程语言,因其高效、...
acm吃糖果的题目,自己根据提示写的比较简单的代码,欢迎指正
基于C++实现的ACM-ACM竞赛常用模板源代码 在ACM(国际大学生程序设计竞赛,International Collegiate Programming Contest)中,参赛团队需要使用编程语言解决一系列算法问题。C++作为一门强大的编程语言,因其高效...
标题中的“PTA.zip_ACM编程_C++_VC和PTA的环境_advicevcc_nailsxcl”表明这是一个关于ACM(国际大学生程序设计竞赛)编程训练的资源包,主要针对C++语言,并且讨论了在Visual C++(VC)环境中如何与PTA(Programming...
- C++实现: ```cpp while(cin>>a>>b) { // 处理输入 } ``` 2. **第二类输入**: - 输入一开始就指明了Input Block的数量N,接着是N个Input Block。 - C语言实现: ```c scanf("%d",&n); for(int i=0; ...
1. 链表:链表是ACM竞赛中常用的动态数据结构,用于实现队列、栈等。C++中的list和forward_list提供了链表操作。 2. 树结构:二叉树、平衡树(如AVL树、红黑树)在解决搜索和排序问题时非常有用。掌握基本的插入、...
标题中的“用于GNURadio的DVB-S2ACM块_C++_Python_源码_下载.zip”表明这是一个关于GNURadio的软件包,其中包含了实现DVB-S2(数字视频广播 - 卫星 - 第二代)标准的高级编码模块(Advanced Coding and Modulation, ...
《浙江大学ACM题解JU_ACM_All_Anwer》是一份极为宝贵的资源,它集结了浙江大学在ACM(国际大学生程序设计竞赛)历年来的题目及其解答。这份资料以CHM电子书的形式呈现,方便读者查阅和学习。对于那些对ACM编程竞赛感...
**KMP算法实现模板(C++版) ACM算法** KMP(Knuth-Morris-Pratt)算法是一种在文本字符串中查找子串匹配的有效方法,尤其适用于已经预处理了模式串(子串)的匹配信息。它是由D.E. Knuth、V. Morris和J.H. Pratt...
总的来说,这个基于C++的ACM-ICPC模板是参赛者在备赛过程中必不可少的工具,它可以帮助参赛者专注于算法设计,而不需要花费过多精力在代码实现的细节上。通过学习和使用这套模板,选手可以提升自己的编程效率,提高...