• 【树的遍历】


    给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。

    输入格式:

    输入第一行给出一个正整数N(≤),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。

    输出格式:

    在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。

    输入样例:

    7
    2 3 1 5 7 6 4
    1 2 3 4 5 6 7

    输出样例:

    4 1 6 3 5 7 2
    #include <bits/stdc++.h>
    using namespace std;
    int a[35],b[35],n;
    struct node
    {
        int la,lb,ra,rb;
        node(int la,int ra,int lb,int rb):la(la),ra(ra),lb(lb),rb(rb){}
    };
    void bfs()
    {
        int flag=1;
        queue <node> qu;
        qu.push(node(1,n,1,n));
        while(!qu.empty())
        {
            node t=qu.front();
            qu.pop();
            int la=t.la,lb=t.lb,ra=t.ra,rb=t.rb,root=a[ra];
            if(flag)
            {
                cout<<root;
                flag=0;
            }
            else cout<<" "<<root;
            for(int i=lb;i<=rb;i++)
            {
                if(b[i]==root)  //用根节点进行判断 
                {
                    int ln=i-lb;
                    int rn=rb-i; 
                    if(ln>0) qu.push(node(la,la+ln-1,lb,i-1));  //左边 
                    if(rn>0) qu.push(node(la+ln,ra-1,i+1,rb));  //右边 
                }
            }
        }
        cout<<"
    ";
    }
    int main()
    {
        cin>>n;
        for(int i=1;i<=n;i++) cin>>a[i];
        for(int i=1;i<=n;i++) cin>>b[i];
        bfs();
        return 0;
    } 
     
  • 相关阅读:
    A1141. PAT Ranking of Institutions
    A1140. Look-and-say Sequence
    A1139. First Contact
    A1138. Postorder Traversal
    A1137. Final Grading
    A1136. Delayed Palindrome
    A1135. Is It A Red-Black Tree
    A1134. Vertex Cover
    A1133. Splitting A Linked List
    layer.open打开iframe页面的调用父页面方法及关闭
  • 原文地址:https://www.cnblogs.com/ww123/p/10290228.html
Copyright © 2020-2023  润新知