您的位置:首页 > 其它

1020. Tree Traversals (25)

2016-02-01 16:53 423 查看
Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and inorder traversal sequences, you are supposed to output the level order traversal sequence of the corresponding binary tree.

Input Specification:

Each input file contains one test case. For each case, the first line gives a positive integer N (<=30), the total number of nodes in the binary tree. The second line gives the postorder sequence and the third line gives the inorder sequence. All the numbers in a line are separated by a space.

Output Specification:

For each test case, print in one line the level order traversal sequence of the corresponding binary tree. All the numbers in a line must be separated by exactly one space, and there must be no extra space at the end of the line.

Sample Input:

7

2 3 1 5 7 6 4

1 2 3 4 5 6 7

Sample Output:

4 1 6 3 5 7 2

做树的题目,要考虑要不要建树。像层次遍历输出,如果是完全二叉树,则不需要,而类似本题则需要。

#include<iostream>
#include<queue>
using namespace std;
int post[55],in[55];
typedef struct node{
int date;
node *left;
node *right;
node(){
left=NULL;right=NULL;
}
}*tree;
tree getlevel(int inl,int inr,int postl,int postr)
{
if(postl>postr) return NULL;
tree t =new node;
t->date=post[postr];
int k;
for(k=inl;k<=inr;k++){
if(in[k]==post[postr])
break;
}
int numleft=k-inl;
t->left=getlevel(inl,k-1,postl,postl+numleft-1);
t->right=getlevel(k+1,inr,postl+numleft,postr-1);
return t;
}
int main(){
int n,i;
freopen("in.txt","r",stdin);
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
cin>>post[i];
for(i=0;i<n;i++)
cin>>in[i];
int inl=0,postl=0,inr=n-1,postr=n-1;
tree t=getlevel(inl,inr,postl,postr);
queue <tree> tq;
tree temp;
printf("%d",t->date);
tq.push(t);
while(!tq.empty())
{
temp=tq.front();
tq.pop();
if(temp->left!=NULL){
printf(" %d",temp->left->date);
tq.push(temp->left);
}
if(temp->right!=NULL){
printf(" %d",temp->right->date);
tq.push(temp->right);
}
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: