7-11 玩转二叉树 (25 分)

简介: 7-11 玩转二叉树 (25 分)

7-11 玩转二叉树 (25 分)


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


输入格式:


输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。


输出格式:


在一行中输出该树反转后的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。


输入样例:


1. 7
2. 1 2 3 4 5 6 7
3. 4 1 3 2 6 5 7


结尾无空行


输出样例:


4 6 1 7 5 3 2


结尾无空行


#include<bits/stdc++.h>
using namespace std;
typedef struct node *tree;
struct node {
    int data;
    tree l,r;
};
int in[40] ,pre[40] ,n;
tree build(int pre[] ,int in[] ,int n) {
    if (n == 0) return NULL;
    int i;
    while(i<n&&in[i]!=pre[0]) i++;
    tree t = (tree) new (tree);
    t -> data = in[i];
    t -> l = build (pre + 1 ,in ,i);
    t -> r = build (pre + i + 1 ,in + i + 1 ,n - i - 1);
    return t;
}
int main() {
    cin >> n;
    for (int i = 0; i < n; i++) cin >> in[i];
    for (int i = 0; i < n; i++) cin >> pre[i];
    tree t = build(pre ,in ,n);
    queue<tree>q;
    q.push(t);
    int f = 0;
    while (!q.empty()) {
        tree x = q.front();
        q.pop();
        if (f++) cout << ' ';
        cout << x -> data;
        if (x -> r) q.push(x -> r);
        if (x -> l) q.push(x -> l);
    }
    return 0;
}



#include<iostream>
using namespace std;
#include<cstring>
const int N=40,inf=-1,M=1e5;
int n,in[N],pre[N],leve[M],flag;
void dfs(int root,int s,int d,int idx){
    if(s>d)return ;
    int i=s;
    while(s<d&&in[i]!=pre[root])i++;
    leve[idx]=pre[root];
    dfs(root+1,s,i-1,2*idx+2);
    dfs(root+(i-s+1),i+1,d,2*idx+1);
}
int main(){
    cin>>n;
    memset(leve,inf,sizeof leve);
    for(int i=0;i<n;i++)cin>>in[i];
    for(int i=0;i<n;i++)cin>>pre[i];
    dfs(0,0,n-1,0);
    for(int i=0;i<M;i++){
        if(leve[i]!=-1){
            if(flag)cout<<' ';
            cout<<leve[i];
            flag=1;
        }
    }
    return 0;
}


目录
相关文章
|
Java 开发者
21组案例详解Java实战 | 面向对象编程
如何将所学知识转化成切实可行的代码?编写简单Java类、实现数组排序和转置功能、将数据表转化为Java内容、如何继承其他类或实现各种接口、怎样创造神奇的链表结构?本合辑将结合实际场景,由多组案例带你一一完成。
12834 0
21组案例详解Java实战 |  面向对象编程
|
XML 前端开发 数据格式
超级详细的python中bs4模块详解
Beautiful Soup 是一个用于从网页中抓取数据的 Python 库,提供了简单易用的函数来处理导航、搜索和修改分析树。支持多种解析器,如 Python 标准库中的 HTML 解析器和更强大的 lxml 解析器。通过简单的代码即可实现复杂的数据抓取任务。本文介绍了 Beautiful Soup 的安装、基本使用、对象类型、文档树遍历和搜索方法,以及 CSS 选择器的使用。
607 1
|
Java Maven
无法解析符号 ‘SpringBootApplication’
无法解析符号 ‘SpringBootApplication’
793 1
|
算法 安全 网络安全
Diffie-Hellman (DH) 算法的工作原理
【8月更文挑战第23天】
2016 0
三大抽样分布——卡方分布、t分布、F分布
三大抽样分布——卡方分布、t分布、F分布
|
小程序
L2-034 口罩发放 (25 分)(模拟)
L2-034 口罩发放 (25 分)(模拟)
510 0
7-11 玩转二叉树 —— 程序设计天梯赛
给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。
147 0
7-11 玩转二叉树 —— 程序设计天梯赛
|
存储 算法
滑动窗口算法的基本思想、应用场景、实现方法、时间复杂度和常见问题
滑动窗口算法的基本思想、应用场景、实现方法、时间复杂度和常见问题
1632 1
|
算法 Python
Hamilton问题求解-最近邻点法和最近插入法(Python实现)
Hamilton问题求解-最近邻点法和最近插入法(Python实现)
673 0
Hamilton问题求解-最近邻点法和最近插入法(Python实现)
|
机器学习/深度学习 缓存 人工智能
X-Anylabeling: 新一代自动标注工具
X-AnyLabeling:具备增强功能的高级自动标注解决方案
8833 0
X-Anylabeling: 新一代自动标注工具