PAT 1020 Tree Traversals

1020 Tree Traversals (25 分)

Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and inorder traversal sequences, you are supposed to output the level order traversal sequence of the corresponding binary tree.

Input Specification:

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

Output Specification:

For each test case, print in one line the level order traversal sequence of the corresponding binary tree. 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:

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

Sample Output:

4 1 6 3 5 7 2
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

struct node{
    int data = -1;
    node *left = NULL;
    node *right = NULL;
};
int n,cnt;

int a[31];
int b[31];

node* createtree(int start,int end){
    if(start > end)
        return NULL;
    int num = a[cnt--];
    node *t = new(node);
    t->data = num;
    if(start == end){ return t;}

    int pos = -1;
    for(int i=start;i <= end;i++){
        if(b[i] == num) pos = i;
    }

    t->right = createtree(pos+1,end);
    t->left = createtree(start,pos-1);

    return t;
}

int main(){
    cin >> n;
    cnt = n-1;

    for(int i=0;i < n;i++) cin >> a[i];
    for(int i=0;i < n;i++) cin >> b[i];

    node *root = createtree(0,n-1);

    queue<node*> que;
    que.push(root);
    int count = 0;

    while(!que.empty()){
        node *t = que.front();que.pop();
        cout << t->data;
        if(count!=n-1){cout << " ";count++;}
        if(t->left)que.push(t->left);
        if(t->right)que.push(t->right);
    }

    return 0;
}
创建节点要new,不然就会出错

原文地址:https://www.cnblogs.com/cunyusup/p/10801579.html

时间: 2024-11-06 17:30:06

PAT 1020 Tree Traversals的相关文章

PAT 1020. Tree Traversals (25)

1020. Tree Traversals (25) Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and inorder traversal sequences, you are supposed to output the level order traversal sequence of the corresponding binary tree.

【PAT】1020 Tree Traversals (25)(25 分)

1020 Tree Traversals (25)(25 分) Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and inorder traversal sequences, you are supposed to output the level order traversal sequence of the corresponding binary

PAT Advanced 1020 Tree Traversals (25分)

1020 Tree Traversals (25分) Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and inorder traversal sequences, you are supposed to output the level order traversal sequence of the corresponding binary tree.

1020. Tree Traversals (25) PAT甲级真题

之前我看了这道题,实在是看不懂网上的解题答案,他们的具体思路基本上就是通过后续遍历和中序遍历,直接推出层次遍历. 我苦思冥想了半天,是在没看懂这种思路,于是想了一个笨点的但是也比较好理解的思路,通过后续和中序,先推出整个二叉树,再考虑 对二叉树层次遍历. 本题还有一点要注意的时在输出结果的末尾,如果使用了类似 pirntf("%d ",data); 这样的格式是不对的,一定要对末尾进行判断消除最尾端的空格. 首先最核心的部分是通过两次遍历反推回二叉树:这里的思路是,后续遍历的最末尾,一

浙大pat甲级题目---1020. Tree Traversals (25)

Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and inorder traversal sequences, you are supposed to output the level order traversal sequence of the corresponding binary tree. Input Specification: Each

PAT 甲级 1020 Tree Traversals

https://pintia.cn/problem-sets/994805342720868352/problems/994805485033603072 Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and inorder traversal sequences, you are supposed to output the level order t

PAT (Advanced Level) 1020. Tree Traversals (25)

递归建树,然后BFS一下 #include<iostream> #include<cstring> #include<cmath> #include<algorithm> #include<cstdio> #include<queue> #include<vector> using namespace std; const int maxn=40; int a[maxn],b[maxn]; int n,tot; struc

PAT:1020. Tree Traversals (25) AC

#include<stdio.h> #include<stdlib.h> #include<queue> using namespace std; int POST[32]; //存放后序遍历 int IN[32]; //存放中序遍历 int n; //节点数 struct node { int data; node* l; node* r; }; node* creat(int postL,int postR,int inL,int inR) { if(postL&g

PAT 1086 Tree Traversals Again

室友在做于是也做一发,跟已知两种遍历序列还原二叉树的思路类似,感觉PAT上的题目跟书本知识靠的近一些 #include <iostream> #include <cstdio> #include <vector> using namespace std; void print_data(const vector<char> &as, const vector<int> &ns) { int len = ns.size(); for