zoukankan      html  css  js  c++  java
  • PAT 甲级 1020 Tree Traversals (二叉树遍历)

    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 <iostream>
    #include <string.h>
    #include <stdlib.h>
    #include <algorithm>
    #include <math.h>
    #include <stdio.h>
    #include <queue>
    
    using namespace std;
    typedef struct Tree
    {
        int data;
        Tree *lchild;
        Tree *rchild;
    }a[40];
    int post[40];
    int in[40];
    int n;
    int ans[40];
    void dfs(int l1,int r1,int l2,int r2,Tree* &root)
    {
      root=new Tree();
        int i;
        for( i=l1;i<=r1;i++)
            if(in[i]==post[r2])
                break;
        root->data=post[r2];
        if(i==l1)
            root->lchild=NULL;
        else
            dfs(l1,i-1,l2,l2+i-l1-1,root->lchild);
        if(i==r1)
            root->rchild=NULL;
        else
            dfs(i+1,r1,r2-(r1-i),r2-1,root->rchild);
    }
    int cnt;
    void bfs(Tree *tree)
    {
      queue<Tree*> q;
      q.push(tree);
      while(!q.empty())
      {
        Tree *root=q.front();
        q.pop();
        ans[cnt++]=root->data;
        if(root->lchild!=NULL)
          q.push(root->lchild);
        if(root->rchild!=NULL)
          q.push(root->rchild);
      }
    }
    int main()
    {
        while(scanf("%d",&n)!=EOF)
        {
            for(int i=1;i<=n;i++)
                scanf("%d",&post[i]);
            for(int i=1;i<=n;i++)
                scanf("%d",&in[i]);
            Tree *tree;
            dfs(1,n,1,n,tree);
        cnt=0;
        bfs(tree);
        for(int i=0;i<cnt;i++)
        {
          if(i==cnt-1)
          printf("%d
    ",ans[i]);
          else
            printf("%d ",ans[i]);
        }
        }
        return 0;
    }


  • 相关阅读:
    Windows系统安装mysql5.7*时mysql服务启动失败的解决方法
    安装MySQL出现 This application requires Visual Studio 2013 x64 Redistributable.Please install the Redistributable then run this installer again
    Fiddler抓包流程
    C#使用NPOI根据模板生成Word文件功能实现
    .NET nhibernate 添加新的表运行报is not mapped的问题
    二进制原码、反码、补码和位运算
    【英语】面试常用语整理
    【检测分割算法整理】
    【Leetcode方法比较】DP/滑窗/前缀和
    【Leetcode】数学系列
  • 原文地址:https://www.cnblogs.com/dacc123/p/8228608.html
Copyright © 2011-2022 走看看