zoukankan      html  css  js  c++  java
  • 【7-10 PAT】树的遍历

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

    输入格式:

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

    输出格式:

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

    输入样例:

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

    输出样例:

    4 1 6 3 5 7 2

    #include<cstdio>
    #include<algorithm>
    #include<queue>
    using namespace std;
    
    const int maxn = 2e5 + 5;
    
    struct Node
    {
        int val,l,r;
    }node[maxn];
    int tot = 0;
    int zhong[maxn],hou[maxn];
    
    int dfs(int len,int zhong[],int hou[])
    {
        if(len <= 0)
            return -1;
        if(len == 1)
        {
            node[++tot].val = hou[1];
            node[tot].l = node[tot].r = -1;
    //        printf("len == 1 %d
    ",tot);
            return tot;
    
        }
        node[++tot].val = hou[len];
    //    printf("%d %d
    ",tot,node[tot].val);
        int res = tot;
        int l;
        for(l = 1;l <= len;l++)
            if(zhong[l] == hou[len])
                break;
        node[res].l = dfs(l-1,zhong,hou);
        node[res].r = dfs(len - l,zhong + l,hou + l - 1);
        return res;
    }
    
    void bfs()
    {
        queue<int>que;
        que.push(1);
        while(!que.empty())
        {
            int cur = que.front();
            que.pop();
            if(cur != 1)
                printf(" ");
            printf("%d",node[cur].val);
            if(node[cur].l != -1)
                que.push(node[cur].l);
            if(node[cur].r != -1)
                que.push(node[cur].r);
        }
    }
    
    
    int main()
    {
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%d",&hou[i]);
        for(int i=1;i<=n;i++)
            scanf("%d",&zhong[i]);
        dfs(n,zhong,hou);
        bfs();
        return 0;
    }
  • 相关阅读:
    http://codeforces.com/problemset/problem/594/A
    http://codeforces.com/contest/610/problem/D
    http://codeforces.com/contest/612/problem/D
    http://codeforces.com/problemset/problem/712/D
    http://codeforces.com/problemset/problem/545/D
    18/10/26 周五集训队第二次比赛补题题解
    归并排序
    hdu 2510 符号三角形
    位运算符的小总结
    hdu 1584 蜘蛛纸牌
  • 原文地址:https://www.cnblogs.com/smallhester/p/10620204.html
Copyright © 2011-2022 走看看