美文网首页
PAT-1020 Tree Traversals (25 分)【

PAT-1020 Tree Traversals (25 分)【

作者: 黑夜里不灭的路灯 | 来源:发表于2019-02-12 23:03 被阅读0次

    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 (≤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

    题意:
    依次给出后序和中序遍历结果,输出中序的遍历结果
    思路:
    传统的建树,然后BFS遍历

    #include<bits/stdc++.h>
    using namespace std;
    
    const int maxn=50;
    int pre[maxn],in[maxn],post[maxn];
    int n;
    struct Node
    {
        int data;
        Node* lchild;
        Node* rchild;
    };
    Node* creat(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 numLeft=k-inL;
        root->lchild=creat(postL,postL+numLeft-1,inL,k-1);
        root->rchild=creat(postL+numLeft,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();
            cout<<now->data;
            num++;
            if (num<n)
            {
                cout<<" ";
            }
            if (now->lchild!=NULL)
            {
                q.push(now->lchild);
            }
            if (now->rchild!=NULL)
            {
                q.push(now->rchild);
            }
        }
    }
    
    int main()
    {
        scanf("%d",&n);
        for(int i=0;i<n;i++)
        {
            scanf("%d",&post[i]);
        }
        for(int i=0;i<n;i++)
        {
            scanf("%d",&in[i]);
        }
        Node* root=creat(0,n-1,0,n-1);
        BFS(root);
    }
    
    

    相关文章

      网友评论

          本文标题:PAT-1020 Tree Traversals (25 分)【

          本文链接:https://www.haomeiwen.com/subject/mpvleqtx.html