zoukankan      html  css  js  c++  java
  • PAT 1020. Tree Traversals

    #include<iostream>
    #include<cstring>
    #include<queue>
    using namespace std;
    
    //已知二叉树的后序和中序遍历,得到层次遍历顺序。
    const int N = 30;
    
    struct Node
    {
        Node* left;
        Node* right;
        int data;
    };
    int postOrder[N];
    int inOrder[N];
    
    //b1,e1表示后序的开始和结束位置;b2,e2表示中序的开始和结束位置。
    void createTree(int b1,int e1,int b2,int e2,Node* &curNode)
    {
        if(b1<0 || b2<0 || b1>e1 || b2>e2) 
            return;
        if(NULL == curNode)
            curNode = new Node();
        curNode->left = NULL;
        curNode->right = NULL;
        curNode->data = postOrder[e1];
        int i = 0,j=0;
        //由于相对位置不一致,所以需要有两个游标。
        for(i=e2,j=e1; i>=b2; i--,j--)
            if(inOrder[i] == postOrder[e1])//postOrder[e]为当前子树的根节点。
                break;
        createTree(b1,j-1,b2,i-1,curNode->left);
        createTree(j,e1-1,i+1,e2,curNode->right);
    }
    
    //层次遍历二叉树.
    void levelOrder(Node* root)
    {
        if(NULL == root)
            return;
        queue<Node*> Q;
        Q.push(root);
        bool isFirst = true;
        while( !Q.empty() )
        {
            Node *tmp = Q.front();
            Q.pop();
            if(NULL == tmp)
                return;
            if(isFirst) 
            {
                cout<<tmp->data;
                isFirst = false;
            }
            else
                cout<<" "<<tmp->data;
            //左右子树入队列
            if(tmp->left)
                Q.push(tmp->left);
            if(tmp->right)
                Q.push(tmp->right);
        }
        cout<<endl;
    }
    
    int main()
    {
        int n,i;
        cin>>n;
        for(i=0; i<n; i++)
            cin>>postOrder[i];
        for(i=0; i<n; i++)
            cin>>inOrder[i];
        Node *root = NULL;
        createTree(0,n-1,0,n-1,root);
        levelOrder(root);
        return 0;
    }
  • 相关阅读:
    bzoj3786 星系探索
    [JSOI2008]火星人
    [NOI2005]维护数列
    [POI2008]砖块Klo
    郁闷的出纳员
    [HNOI2002]营业额统计
    [BZOJ1651][Usaco2006 Feb]Stall Reservations 专用牛棚
    [BZOJ2124]等差子序列
    [BZOJ3038]上帝造题的七分钟2
    [BZOJ1711][Usaco2007 Open]Dining吃饭
  • 原文地址:https://www.cnblogs.com/yanhaiming/p/2797276.html
Copyright © 2011-2022 走看看