1020. Tree Traversals (25)

原创 2016年08月28日 21:38:45

1020. Tree Traversals (25)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue

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 (<=30), 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<stdio.h>

#include<string.h>
#include<algorithm>
#include<queue>
using namespace std;
int n,i,j;
 struct node{
  int data;
  node*lchild;
  node*rchild;
 };
int post[50],in[50];
 node*create(int postL,int postR,int inL,int inR)
 {


     if(postL>postR)
     {
      return NULL;
}
     node*root = new node;//存放根节点的地址
root->data = post[postR];//根节点的值
//遍历找到左右子树的个数 
int k;
for(k=inL;k<=inR;k++)
{
if(in[k]==post[postR])
        break;
}
     int numberLeft = k-inL;//左子树的个数
     //赋值给左子树  
     root->lchild=create(postL,postL+numberLeft-1,inL,k-1);
     root->rchild=create(postL+numberLeft,postR-1,k+1,inR);
     return root;//返回根节点地址 
 }
 int num=0;
void BFS(node*root)
{
queue<node*>q;
    q.push(root);
    while(!q.empty())
    {
    node*now=q.front();
    q.pop();
        printf("%d",now->data);
    num++;
    if(num<n){
     printf(" ");
}
if(now->lchild!=NULL)q.push(now->lchild);
if(now->rchild!=NULL)q.push(now->rchild);
}

int main()
{
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&post[i]);
}
for(j=0;j<n;j++)
{
scanf("%d",&in[j]);
}
//建树
node*root = create(0,n-1,0,n-1);
//层序遍历
BFS(root); 
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

PAT A1020. Tree Traversals (25)

Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and i...
  • jolivan
  • jolivan
  • 2017年02月24日 01:34
  • 84

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

1020. Tree Traversals (25) Suppose that all the keys in a binary tree are distinct positive int...
  • liuchuo
  • liuchuo
  • 2016年08月06日 18:31
  • 337

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

题意:给你一个二叉树的后序和中序遍历的序列,输出前序遍历的序列. 二叉树遍历第一题,当做模板留个纪念吧......

PAT: 1020. Tree Traversals (25)

PAT Tree Traversals 二叉树遍历 由中序和后序构建唯一二叉树
  • ZJFCLH
  • ZJFCLH
  • 2014年03月17日 22:33
  • 861

PAT A 1020.Tree Traversals (25)

题目

1020. Tree Traversals (25) -BFS

这是一道很直接的给出中序序列和任一其他序列生成二叉树的问题,本题给出的是后序遍历和中序遍历,利用后序遍历的“左右根”顺序我们知道,后序序列的最后一个元素一定是整棵树的根,从后向前,分别是右、左子树的根...

A1020. Tree Traversals (25)

Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and i...

PAT甲级真题及训练集(19)--1020. Tree Traversals (25)(后序,中序建树,很重要)

1020. Tree Traversals (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 ...

PAT1020. Tree Traversals (25)(已知中序后序求层序)

1020. Tree Traversals (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 ...

pat1020. Tree Traversals (25)

算法思路: 1、后序最后元素为根,根将中序分为左右子树 2、层序遍历利用队列实现,java使用LinkedList import java.util.LinkedList; import jav...
  • ldrmcml
  • ldrmcml
  • 2015年03月09日 09:38
  • 412
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:1020. Tree Traversals (25)
举报原因:
原因补充:

(最多只允许输入30个字)