• 天梯赛 L2-006 树的遍历(序列建树)


    L2-006 树的遍历 (25 分)

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

    输入格式:

    输入第一行给出一个正整数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
    
    作者: 陈越
    单位: 浙江大学
    时间限制: 400 ms
    内存限制: 64 MB
    代码长度限制: 16 KB
     
     
     
    根据给定序列建出二叉树,然后进行层序遍历。
     
    #include<bits/stdc++.h>
    #define MAX 125
    using namespace std;
    
    struct Node{   //二叉树建立
        int x,l,r;
    }tree[MAX];
    int h[MAX],z[MAX];
    int c;
    
    int find(int h[],int z[],int len){   //找中序的父节点 
        for(int i=0;i<len;i++){
            if(z[i]==h[len-1]){
                return i;
            }
        }
    }
    int build(int h[],int z[],int len){   //建树 
        if(len<=0) return -1;
        int k=find(h,z,len);
        c++;
        int f=c;
        tree[f].x=z[k];
        tree[f].l=build(h,z,k);
        tree[f].r=build(h+k,z+(k+1),len-(k+1));
        return f;
    }
    void bfs(int x){    //层序遍历 
        int f=0,i;
        queue<int> q;
        q.push(x);
        while(q.size()){
            int x=tree[q.front()].x;
            int l=tree[q.front()].l;
            int r=tree[q.front()].r;
            if(f==0) f=1;
            else printf(" ");
            printf("%d",x);
            if(l>-1) q.push(l);
            if(r>-1) q.push(r);
            q.pop();
        }
    }
    int main()
    {
        int n,i,j;
        scanf("%d",&n);
        for(i=0;i<n;i++){
            scanf("%d",&h[i]);
        }
        for(i=0;i<n;i++){
            scanf("%d",&z[i]);
        }
        c=0;
        build(h,z,n);
        bfs(1);
        return 0;
    }
  • 相关阅读:
    a[::-1]相当于 a[-1:-len(a)-1:-1],也就是从最后一个元素到第一个元素复制一遍。
    +=
    map 和reduce
    赋值语句
    高阶函数
    函数式编程
    迭代器
    如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断:
    ie11升级的过程中遇到的问题以及解决办法
    .csporj 文件部分节点解析
  • 原文地址:https://www.cnblogs.com/yzm10/p/10498905.html
Copyright © 2020-2023  润新知