TZOJ 5225: 玩转二叉树
描述
给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。
输入
输入第一行给出一个正整数N(N≤30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。
输出
在一行中输出该树反转后的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。
样例输入
7
1 2 3 4 5 6 7
4 1 3 2 6 5 7
样例输出
4 6 1 7 5 3 2
解题思路
解题思路对于一棵树来说前序的第一个是树的根,记录下来然后到中序里面去找
中序的左边做左子树,右边为为右子树,然后递归建树
菜鸡的成长史
觉得写的对你有帮助的关注下^-^
#include <bits/stdc++.h>
using namespace std;
int Qi[],Zh[];
struct Node
{
int data;
Node* left;
Node* right;
};
Node* creat(int ZL,int ZR,int QL,int QR)
{ //ZL中序左边 ZR中序右边 QL前序左边 QR前序右边
if(QL>QR) return NULL; //返回条件
Node *root=new Node;
root->data=Qi[QL];
int biaoji;
for(int i=;i<=ZR;i++)
{
if(Zh[i]==Qi[QL]) //找出根节点在中序遍历的位置
{biaoji=i;break;}
}
int geshu=biaoji-ZL; //左子树 有几个
root->left=creat(ZL,biaoji-,QL+,QL+geshu);
root->right=creat(biaoji+,ZR,QL+geshu+,QR); //递归建树 理解表层不要深究里面的
return root; //对递归的理解有推出条件,思路理清就行 ^-^菜鸡的理解
} void printtf(Node *tree) //层次遍历
{
queue<Node*> que;
que.push(tree);
int flag=;
while(!que.empty())
{
Node *e=que.front();
que.pop();
if(flag!=)
cout << " ";
cout << e->data;flag=;
if(e->right!=NULL) //镜面反转:本来左到右 现在右到左
que.push(e->right);
if(e->left!=NULL)
que.push(e->left);
}
cout << endl;
} int main()
{
int n;
cin>>n;
for(int i=;i<n;i++)
cin>>Zh[i];
for(int i=;i<n;i++)
cin>>Qi[i];
Node *tree=creat(,n-,,n-);
printtf(tree);
return ;
}
不懂的可以访问下这个帮助理解
http://www.cnblogs.com/liujinghuan/p/5842487.html
TZOJ 5225: 玩转二叉树的更多相关文章
- TOJ 5225: 玩转二叉树
传送门:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=5225 时间限制(普通/Java): ...
- 团体程序设计天梯赛-练习集L2-011. 玩转二叉树
L2-011. 玩转二叉树 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜 ...
- 团体程序设计天梯赛 L2-006. 树的遍历 L2-011. 玩转二叉树
L2-006. 树的遍历 #include <stdio.h> #include <stdlib.h> #include <string.h> #include & ...
- pat 团体天梯赛 L2-011. 玩转二叉树
L2-011. 玩转二叉树 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜 ...
- L2-011. 玩转二叉树(不建树)
L2-011. 玩转二叉树 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列.所谓镜面反转,是指将所有非叶结点的左右孩子对换.这里假设键值都是互不相等的正整 ...
- 【PAT-二叉树】L2-011. 玩转二叉树- 仅仅开100大的数组模拟即可!
L2-011. 玩转二叉树 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列.所谓镜面反转,是指将所有非叶结点的左右孩子对换.(我的分析:无非就是说把左子树当成 ...
- ACM题目————玩转二叉树
给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列.所谓镜面反转,是指将所有非叶结点的左右孩子对换.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出 ...
- L2-011 玩转二叉树 (25 分) (树)
链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805065406070784 题目: 给定一棵二叉树的中序遍历和前序 ...
- PTA 天梯赛练习 7-11 玩转二叉树-二叉树重建
以前就思考过这个问题,但是没有深入的想过,这是一种叫二叉树重建的典型题目 如果给出中序和前序,求出后序遍历. 这道题则求的是交换儿子节点的层序遍历. 二叉树的重建应该怎么重建,首先我们知道,先根遍历, ...
随机推荐
- Brainfuck反汇编(Python)
global cs global ip global ss #global sp global ds global bp global tab global out #cs='++++++++++[& ...
- Weka算法Clusterers-Xmeans源代码分析(一)
<p></p><p><span style="font-size:18px">上几篇博客都是分析的分类器算法(有监督学习),这次就分 ...
- CAP原理中的一致性
CAP原理指的是,这三个要素最多只能同时实现两点,不可能三者兼顾.因此在进行分布式架构设计时,必须做出取舍.而对于分布式数据系统,分区容忍性是基本要求,否则就失去了价值.因此设计分布式数据系统,就是在 ...
- Turning off “Language Service Disabled” error message in VS2017
We are getting the following "Error" message in our MVC web application in Visual studio 2 ...
- [Algorithm] *String Matching and Hashing
Link: Computer Algorithms: Rabin-Karp String Searching 为了避免挨个字符对文本和模式串进行比较,我们可以尝试一次性判断两者是否相等. 因此,我们需 ...
- VS Release模式调试
c++ -> 常规 -〉调试信息格式 选 程序数据库(/Zi)或(/ZI) c++ -> 优化 -〉优化 选 禁止(/Od) 连接器 -〉调试 -〉生成调试信息 选 是 (/DEBUG)
- [Android] 基于 Linux 命令行构建 Android 应用(五):Ant 构建命令
Android SDK 提供的 android 工具可以在项目根目录自动生成 Ant 构建文件 build.xml[1].进入项目根目录后,你可以使用以下 Ant 命令[2]. ant clean 清 ...
- Mysql之一二
1.limit用来限制select语句返回指定的记录数,可以接受一个或者两个数字参数.如果参数为一个,是返回的数据条数:如果给定参数为两个,第一个参数为指定第一个返回记录行的偏移量(初识记录行的偏移量 ...
- css布局 - 垂直居中布局的一百种实现方式(更新中...)
首先将垂直居中的现象和实现方式两大方向细分类如下: 接下来逐条累加不同情况下的垂直居中实现. 目录: 一.父元素高度固定时,单行文本 | 图片的垂直居中 1. line-height行高简单粗暴实现法 ...
- linux-Centos 7下tftp-server服务的安装与配置
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间 进行简单文件传输的协议,提供不复杂.开销不大的文件传输服 ...