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;
}
#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) 编辑 收藏 举报