描述

给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。

输入

输入第一行给出一个正整数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: 玩转二叉树的更多相关文章

  1. TOJ 5225: 玩转二叉树

    传送门:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=5225 时间限制(普通/Java): ...

  2. 团体程序设计天梯赛-练习集L2-011. 玩转二叉树

    L2-011. 玩转二叉树 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜 ...

  3. 团体程序设计天梯赛 L2-006. 树的遍历 L2-011. 玩转二叉树

    L2-006. 树的遍历 #include <stdio.h> #include <stdlib.h> #include <string.h> #include & ...

  4. pat 团体天梯赛 L2-011. 玩转二叉树

    L2-011. 玩转二叉树 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜 ...

  5. L2-011. 玩转二叉树(不建树)

    L2-011. 玩转二叉树   给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列.所谓镜面反转,是指将所有非叶结点的左右孩子对换.这里假设键值都是互不相等的正整 ...

  6. 【PAT-二叉树】L2-011. 玩转二叉树- 仅仅开100大的数组模拟即可!

    L2-011. 玩转二叉树 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列.所谓镜面反转,是指将所有非叶结点的左右孩子对换.(我的分析:无非就是说把左子树当成 ...

  7. ACM题目————玩转二叉树

    给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列.所谓镜面反转,是指将所有非叶结点的左右孩子对换.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出 ...

  8. L2-011 玩转二叉树 (25 分) (树)

    链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805065406070784 题目: 给定一棵二叉树的中序遍历和前序 ...

  9. PTA 天梯赛练习 7-11 玩转二叉树-二叉树重建

    以前就思考过这个问题,但是没有深入的想过,这是一种叫二叉树重建的典型题目 如果给出中序和前序,求出后序遍历. 这道题则求的是交换儿子节点的层序遍历. 二叉树的重建应该怎么重建,首先我们知道,先根遍历, ...

随机推荐

  1. CSS实现响应式全屏背景图

    body { /* 加载背景图 */ background-image: url(images/background-photo.jpg); /* 背景图垂直.水平均居中 */ background- ...

  2. Java知多少(7)类与对象

    Java是一门面向对象的编程语言,理解Java,首先要理解类与对象这两个概念. Java中的类可以看做C语言中结构体的升级版.结构体是一种构造数据类型,可以包含不同的成员(变量),每个成员的数据类型可 ...

  3. Cisco NTP配置

    Windows 或 Linux 系统配置成NTP服务器,思科交换机配置成NTP客户端 ##创建VLAN 10 SW01>enable SW01#vlan database SW01(vlan)# ...

  4. Generate class from database table How can i generate a class from a table at a SQL Server?

    Set @TableName to the name of your table. declare @TableName sysname = 'TableName' declare @Result v ...

  5. 移除input在type="number"时的上下箭头

    网页在有些情况下,会需要input的输入的为单纯数字的文本框,此时type=number,但使用type=number时,输入框后面会有一个上下箭头,那么如何去掉上下箭头呢? <input ty ...

  6. mybatis通用mapper源码解析(二)

    1.javabean的属性值生成sql /** * 获取所有查询列,如id,name,code... * * @param entityClass * @return */ public static ...

  7. orcal数据库基本操作

    1.连接 SQL*Plus system/manager 2.显示当前连接用户 SQL> show user 3.查看系统拥有哪些用户 SQL> select * from all_use ...

  8. css---点击显示和隐藏

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 适用于CentOS6.4的Win7双系统安装方式

    (文章在2013-11-16 15:56:31修改,此次修改幅度较大,之前的安装方式有问题,已经不推荐使用.笔者在此对各位读者表示深深的歉意!) 在之前的文章中我们实现了Win7+CentOS6.3双 ...

  10. Android必学-异步加载+Android自定义View源码【申明:来源于网络】

    Android必学-异步加载+Android自定义View源码[申明:来源于网络] 异步加载地址:http://download.csdn.net/detail/u013792369/8867609 ...