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 玩转二叉树-二叉树重建
以前就思考过这个问题,但是没有深入的想过,这是一种叫二叉树重建的典型题目 如果给出中序和前序,求出后序遍历. 这道题则求的是交换儿子节点的层序遍历. 二叉树的重建应该怎么重建,首先我们知道,先根遍历, ...
随机推荐
- 和我一起学Effective Java之创建和销毁对象
前言 主要学习创建和销毁对象: 1.何时以及如何创建对象 2.何时以及如何避免创建对象 3.如何确保它们能够适时地销毁 4.如何管理对象销毁之前必须进行的清理动作 正文 一.用静态工厂方法代替构造器 ...
- k8s(1)-使用kubeadm安装Kubernetes
安装前准备 1. 一台或多台主机,这里准备三台机器 角色 IP Hostname 配置(最低) 操作系统版本 主节点 192.168.0.10 master 2核2G CentOS7.6.1810 工 ...
- 官方文档:Office VBA 参考
https://docs.microsoft.com/zh-CN/office/vba/api/overview/ Office VBA 参考 https://docs.microsoft.co ...
- 用SpannableString打造绚丽多彩的文本显示效果
extends:http://www.jianshu.com/p/84067ad289d2 引语 TeXtView大家应该都不陌生,文本展示控件嘛! 就用TextView显示普普通通的文本,OK,很简 ...
- WPF使用Canvas绘制可变矩形
1.问题以及解决办法 最近因为项目需要,需要实现一个位置校对的功能,大致的需求如下:有一个图片,有一些位置信息,但是位置信息可能和实际有些偏差,需要做简单调整,后面会对这张图片进行切割等,做些处理.( ...
- eclipse下配置Spring环境
工具: jdk1.8 win10 spring5.0 1.准备工作:下载Spring开发应用的插件,api 1.spring插件包:springsource-tool-suite-3.9.4.RELE ...
- Flask web开发之路七
今天写SQLAlchemy数据库 首先介绍ORM的概念: ORM,Object类,Relationship:关系,Mapping:映射,也就是模型关系映射 flask-sqlalchemy是一套ORM ...
- RabbitMQ----整理
------------------------------------------------------------------RabbitMQ-------------------------- ...
- Ansible自动化运维之介绍安装与简单使用
参考:http://blog.51cto.com/191226139/2066936 Ansible是什么 Ansible 简单的说是一个配置管理系统(configuration management ...
- Windows的文件类型关联
在用脚本语言开发时尤其是在windows环境下发现想自动在命令行环境下运行脚本必须要带着相应的解释器的路径才行,不然就会提示无法找到对应的命令,于是乎在<学习Ruby>这本书中对于文件类型 ...