L2-006. 树的遍历

Posted zhangzehua

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了L2-006. 树的遍历相关的知识,希望对你有一定的参考价值。

给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。
输入格式:
输入第一行给出一个正整数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<stdio.h>
#include<string.h>

int tree[1000*4+10];

void build(int l1,int r1,int l2,int r2,int pos[],int ino[],int root)///建树,基本操作
{
    if(l1>r1)
        return;
    tree[root]=pos[r1];
    for(int i=0; l2+i<=r2; i++)
    {
        if(pos[r1]==ino[l2+i])
        {
            build(l1,l1+i-1,l2,l2+i-1,pos,ino,root*2);
            build(l1+i,r1-1,l2+i+1,r2,pos,ino,root*2+1);
            break;
        }
    }

}

int main()
{
    int n;
    int ino[50],pos[50];
    memset(tree,0,sizeof(tree));
    scanf("%d",&n);
    for(int i=1; i<=n; i++)
        scanf("%d",&pos[i]);
    for(int i=1; i<=n; i++)
        scanf("%d",&ino[i]);
    build(1,n,1,n,pos,ino,1);
    int cnt=0;

    for(int i=1;;i++)////层次遍历
    {
        if(tree[i]!=0)
        {
            cnt++;
            if(cnt==1)
                printf("%d",tree[i]);
            else
                printf(" %d",tree[i]);
            if(cnt==n)
                break;
        }
    }
    return 0;
}

 

 

以上是关于L2-006. 树的遍历的主要内容,如果未能解决你的问题,请参考以下文章

团体天梯练习 L2-006 树的遍历

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

L2-006.树的遍历

L2-006. 树的遍历

L2-006 树的遍历

团体程序设计天梯赛 L2-006. 树的遍历 L2-011. 玩转二叉树