zoukankan      html  css  js  c++  java
  • L2-011. 玩转二叉树

    L2-011. 玩转二叉树

    时间限制
    400 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    陈越

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

    输入格式:

    输入第一行给出一个正整数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

    分析:这个题目简直就是和l2-006是一个模子刻出来的题目
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 struct node{
     4     int l, r;
     5 }a[100000];
     6 int frt[32], mid[32];
     7 
     8 int build(int la, int ra, int lb, int rb){
     9     if(la>ra)    return 0;
    10     int root=frt[lb];
    11     int p1, p2;
    12     p1=la;
    13     while(mid[p1]!=root)    p1++;
    14     p2=p1-la;
    15     a[root].l=build(la, p1-1, lb+1,  lb+p2);
    16     a[root].r=build(p1+1, ra, lb+p2+1, rb);
    17     return root;
    18 }
    19 void bfs(int x){
    20     queue<int>q;
    21     q.push(x);
    22     int cnt=0;
    23     while(q.size()){
    24         int m=q.front(); q.pop();
    25         ++cnt==1?cout<<m:cout<<" "<<m;
    26         if(a[m].r!=0)    q.push(a[m].r);
    27         if(a[m].l!=0)    q.push(a[m].l);
    28     }
    29 }
    30 int main(){
    31     int n;
    32     cin>>n;
    33     for(int i=0; i<n; i++)
    34         cin>>mid[i];
    35     for(int i=0; i<n; i++)
    36         cin>>frt[i];
    37     int pos=build(0, n-1, 0, n-1);
    38     bfs(pos);
    39     
    40     return 0;
    41 }
  • 相关阅读:
    python基本数据类型
    大学排名之数据库练习
    Python turtle学习笔记
    初学爬虫
    用python进行对乒乓球的比赛分析,并且将该程序进行封装
    新网页
    Python pandas
    十大经典排序算法
    C++的split()函数
    C++多态意义探究
  • 原文地址:https://www.cnblogs.com/ledoc/p/6591919.html
Copyright © 2011-2022 走看看