1127 ZigZagging on a Tree (30 分)

Suppose that all the keys in a binary tree are distinct positive integers. A unique binary tree can be determined by a given pair of postorder and inorder traversal sequences. And it is a simple standard routine to print the numbers in level-order. However, if you think the problem is too simple, then you are too naive. This time you are supposed to print the numbers in "zigzagging order" -- that is, starting from the root, print the numbers level-by-level, alternating between left to right and right to left. For example, for the following tree you must output: 1 11 5 8 17 12 20 15.

Input Specification:

Each input file contains one test case. For each case, the first line gives a positive integer N (≤30), the total number of nodes in the binary tree. The second line gives the inorder sequence and the third line gives the postorder sequence. All the numbers in a line are separated by a space.

Output Specification:

For each test case, print the zigzagging sequence of the tree in a line. All the numbers in a line must be separated by exactly one space, and there must be no extra space at the end of the line.

Sample Input:

8
12 11 20 17 1 15 8 5
12 20 17 11 15 8 5 1

Sample Output:

1 11 5 8 17 12 20 15

题意:中序和后序建树,然后按zigzagging order输出。

分析:层序遍历的时候将节点输出到容器中,最后输出的时候根据奇数还是偶数来输出结点

 /**
 * Copyright(c)
 * All rights reserved.
 * Author : Mered1th
 * Date : 2019-02-28-14.24.50
 * Description : A1127
 */
 #include<cstdio>
 #include<cstring>
 #include<iostream>
 #include<cmath>
 #include<algorithm>
 #include<string>
 #include<unordered_set>
 #include<map>
 #include<vector>
 #include<set>
 #include<queue>
 using namespace std;
 ;
 int n,post[maxn],in[maxn];
 vector<int> ans[maxn];
 struct Node{
     int val,layer;
     Node* lchild;
     Node* rchild;
     Node(int _val,int _layer){
         val=_val;
         lchild=NULL;
         rchild=NULL;
         layer=_layer;
     }
 };
 ;
 Node* create(int inL,int inR,int postL,int postR,int layer){
     if(inL>inR) return NULL;
     if(layer>maxlayer) maxlayer=layer;
     int rootVal=post[postR];
     Node* root=new Node(rootVal,layer);
     int k;
     for(int i=inL;i<=inR;i++){
         if(post[postR]==in[i]){
             k=i;
             break;
         }
     }
     int numLeft=k-inL;
     root->lchild=create(inL,k-,postL,postL+numLeft-,layer+);
     root->rchild=create(k+,inR,postL+numLeft,postR-,layer+);
     return root;
 }

 void BFS(Node* root){
     queue<Node*> q;
     q.push(root);
     while(!q.empty()){
         Node* now=q.front();
         q.pop();
         ans[now->layer].push_back(now->val);
         if(now->lchild!=NULL) q.push(now->lchild);
         if(now->rchild!=NULL) q.push(now->rchild);
     }
 }

 int main(){
 #ifdef ONLINE_JUDGE
 #else
     freopen("1.txt", "r", stdin);
 #endif
     scanf("%d",&n);
     ;i<n;i++){
         scanf("%d",&in[i]);
     }
     ;i<n;i++){
         scanf("%d",&post[i]);
     }
     Node* root=create(,n-,,n-,);
     BFS(root);
     ;i<=maxlayer;i++){
         ){
             printf(]);
             continue;
         }
         ==){
             ;j<ans[i].size();j++){
                 printf(" %d",ans[i][j]);
             }
         }
         else{
             ;j>=;j--){
                 printf(" %d",ans[i][j]);
             }
         }
     }
     ;
 }

1127 ZigZagging on a Tree (30 分)的更多相关文章

  1. PAT甲级 1127. ZigZagging on a Tree (30)

    1127. ZigZagging on a Tree (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue ...

  2. pat 甲级 1127. ZigZagging on a Tree (30)

    1127. ZigZagging on a Tree (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue ...

  3. PAT Advanced 1127 ZigZagging on a Tree (30) [中序后序建树,层序遍历]

    题目 Suppose that all the keys in a binary tree are distinct positive integers. A unique binary tree c ...

  4. PAT甲题题解-1127. ZigZagging on a Tree (30)-中序、后序建树

    根据中序遍历和前序遍历确定一棵二叉树,然后按“层次遍历”序列输出.输出规则:除根节点外,接下来每层的节点输出顺序是:先从左到右,再从右到左,交替输出 #include <iostream> ...

  5. PAT 1127 ZigZagging on a Tree[难]

    1127 ZigZagging on a Tree (30 分) Suppose that all the keys in a binary tree are distinct positive in ...

  6. PAT甲级1127. ZigZagging on a Tree

    PAT甲级1127. ZigZagging on a Tree 题意: 假设二叉树中的所有键都是不同的正整数.一个唯一的二叉树可以通过给定的一对后序和顺序遍历序列来确定.这是一个简单的标准程序,可以按 ...

  7. PTA 04-树6 Complete Binary Search Tree (30分)

    题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/669 5-7 Complete Binary Search Tree   (30分) A ...

  8. PAT-2019年冬季考试-甲级 7-4 Cartesian Tree (30分)(最小堆的中序遍历求层序遍历,递归建树bfs层序)

    7-4 Cartesian Tree (30分)   A Cartesian tree is a binary tree constructed from a sequence of distinct ...

  9. PAT 甲级 1064 Complete Binary Search Tree (30 分)(不会做,重点复习,模拟中序遍历)

    1064 Complete Binary Search Tree (30 分)   A Binary Search Tree (BST) is recursively defined as a bin ...

随机推荐

  1. 《DSP using MATLAB》Problem 6.7

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...

  2. 《DSP using MATLAB》Problem 5.13

    1. 代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output ...

  3. 【TCP/IP】二、协议的概念

    一.概念 1.tcp/ip是通信协议的统称. 2.协议就是计算机与计算机之间通过网络实现通信时,事先达成的一种约定.这种约定,使那些不同厂商的设备,不同的CPU以及不同的操作系统组成的计算机之间,只要 ...

  4. Collection接口中方法的使用

    Collection:集合的接口 1.Collection和ArrayList和List的关系 ArrayList      implement(实现)       List List        ...

  5. openresty 使用lua-resty-shell 执行shell 脚本

    lua-resty-shell 是一个很不错的项目,让我们可以无阻塞的执行shell命令,之间的通信 是通过socket (一般是unix socket) 环境准备 docker-compose 文件 ...

  6. c++内存泄漏原因及解决办法(智能指针)

    内存泄漏 由于疏忽或错误造成程序未能释放已经不再使用的内存的情况.内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费. 内存泄露的 ...

  7. Grid Virtual Server 和 网格计算

    Grid Virtual Server 的 Virtual Server 源于 LVS (Linux Virtual Server) , LVS 的意思就是把 多个 Linux 服务器 联合起来构成一 ...

  8. 混合pyqt和qtcreator (2): Impl a image viewer (can show FIji ROI manager data)

    # -*- coding: utf-8 -*- """ Simple demonstration of TreeWidget, which is an extension ...

  9. js 的深拷贝

    出处:https://www.cnblogs.com/Chen-XiaoJun/p/6217373.html function deepClone(initalObj, finalObj) { var ...

  10. 关于plot画图的原理

    首先是导入的: Import matplotlib.pyplot as plt 这份导入要背住,没事就是需要你进行导入的: 然后就是画图了,下面举一个例子: import numpy as np im ...