0
点赞
收藏
分享

微信扫一扫

@天体赛训练题 树的遍历 (25 分)

我是芄兰 2022-04-02 阅读 54
c++

输入格式:

输入第一行给出一个正整数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<bits/stdc++.h>
using namespace std;
int n;
int c[31],b[31];// 后序,中序数组
struct node{
	int bi;int ci;int l;//结点储存每个片段
};
queue<node>q;
void bfs(){
	node nd;nd.bi=0,nd.ci=n-1;nd.l=n;
	q.push(nd);
	while(!q.empty()){
		nd=q.front();
		q.pop();
		cout<<c[nd.ci]<<" ";
		int k=0;
		while(k<nd.l&&b[nd.bi+k]!=c[nd.ci])k++;
		if(k>0){
			node nd1;nd1.bi=nd.bi,nd1.ci=nd.ci-(nd.l-k);nd1.l=k;
			q.push(nd1);
		}//dfs(bi,ci-(l-k),k);
		if(nd.l-k-1>0){
			node nd1;
			nd1.bi=nd.bi+k+1,nd1.ci=nd.ci-1;nd1.l=nd.l-k-1;q.push(nd1);
		}//dfs(bi+k+1,ci-1,l-k-1);
	}
	
}
int main(){
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>c[i];
	}	
	for(int i=0;i<n;i++){
		cin>>b[i];
	}
	bfs();
	return 0;
}

 

举报

相关推荐

0 条评论