HDU Binary Tree Traversals

#include<stdio.h>
#include<cstdlib>
int N;
int preorder[1010];
int inorder[1010];
int find(int root)
{
    int i;
    for(i=1;i<=N;i++)
    {
        if(inorder[i]==root)
        {
            return i;
        }
    }
    return 0;
}
void postorder(int sp,int ep,int sm,int em)
{
    if(sp>ep||sm>em)return ;
    int n=find(preorder[sp]);
    postorder(sp+1,sp+n-sm,sm,n-1);
    postorder(sp+n-sm+1,ep,n+1,em);
    if(sp!=1)
        printf("%d ",preorder[sp]);
}
int main()
{
    while(scanf("%d",&N)!=EOF)
    {
        int i;
        for(i=1;i<=N;i++)
        {
            scanf("%d",&preorder[i]);
        }
        for(i=1;i<=N;i++)
        {
            scanf("%d",&inorder[i]);
        }
        postorder(1,N,1,N);
        printf("%d\n",preorder[1]);
    }
    return 0;
}

posted on 2011-06-22 11:47  lonelycatcher  阅读(226)  评论(0编辑  收藏  举报

导航