zoukankan      html  css  js  c++  java
  • A1020. 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 (<=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
     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <iostream>
     4 #include <string.h>
     5 #include <math.h>
     6 #include <algorithm>
     7 #include <string>
     8 #include <stack> 
     9 #include <queue>
    10 using namespace std;
    11 struct node{
    12     int data;
    13     node * left;
    14     node *right;
    15 }; 
    16 const int maxn=50;
    17 int in[maxn];
    18 int post[maxn];
    19 node * create(int a,int b,int c,int d)
    20 {
    21     if(a>b)return NULL;
    22     node * newnode=new node;
    23     newnode->data=post[b];
    24     //后序最后一个节点
    25     int k=0;
    26     for(;k+c<=d;k++)
    27     {
    28         if(in[k+c]==post[b])
    29         {
    30             break;
    31         }
    32     }
    33     newnode->left=create(a,a+k-1,c,c+k-1);
    34     newnode->right=create(a+k,b-1,c+k+1,d);
    35     return newnode;        
    36 }
    37  int n;
    38 int BFS(node * root )
    39 {
    40     queue<node *> q;
    41     int num=0;
    42     q.push(root);
    43     while(!q.empty())
    44     {
    45         node * temp=q.front();
    46         q.pop();
    47         printf("%d",temp->data);
    48         num++;
    49         if(num<n)printf(" ");
    50         if(temp->left!=NULL)q.push(temp->left);
    51         if(temp->right!=NULL)q.push(temp->right);
    52     }
    53 }
    54 
    55 int main(){
    56    
    57     scanf("%d",&n);
    58     
    59     for(int i=0;i<n;i++)
    60     {
    61         scanf("%d",&post[i]);
    62     }
    63     for(int i=0;i<n;i++)
    64     {
    65         scanf("%d",&in[i]);
    66     }
    67     
    68     node * root=create(0,n-1,0,n-1);
    69     BFS(root);
    70     return 0;
    71 }
  • 相关阅读:
    第六章实验报告
    第三次实验报告
    第五章 循环结构课后反思
    第二次实验报告
    第一次实验报告
    第一次课后作业
    第五章 循环结构
    第九章实验报告
    第八章实验报告
    第七章 数组实验
  • 原文地址:https://www.cnblogs.com/ligen/p/4317050.html
Copyright © 2011-2022 走看看