PAT-1020 Tree Traversals

1020 Tree Traversals (25)(25 分)

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<stdio.h>
#include<queue>

int post[30],in[30];
int left[30]={0},right[30]={0};
int buildT(int p1,int p2,int i1,int i2){
	int root=post[p2];
	if(p1==p2){
		return root;
	}else if(p1>p2){
		return 0;
	}
	int ri=i1;
	for(;ri<=i2;ri++){
		if(in[ri]==root) break;
	}
	int leftN=ri-i1;
	left[root]=buildT(p1,p1+leftN-1,i1,ri-1);//left
	right[root]=buildT(p1+leftN,p2-1,ri+1,i2);//right

	return root;
}
int main(){
	int n;
	scanf("%d",&n);
	for(int i=0;i<n;i++)
		scanf("%d",post+i);
	for(int i=0;i<n;i++)
		scanf("%d",in+i);

	buildT(0,n-1,0,n-1);

	std::queue<int> q;
	int root=post[n-1];
	printf("%d",root);
	if(left[root]) q.push(left[root]);
	if(right[root]) q.push(right[root]);
	while(!q.empty()){
		int root=q.front();
		q.pop();printf(" %d",root);
		if(left[root]) q.push(left[root]);
		if(right[root]) q.push(right[root]);
	}

	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值