#include<cstdio>
#include<queue>
using namespace std;
int post_nodes[31];
int in_nodes[31];
int level_nodes[31];
struct Node{
int data;
Node* left;
Node* right;
Node(int data1):left(NULL),right(NULL),data(data1){};//构造函数
Node(){};
};
Node* createTree(int postL, int postR, int inL, int inR){ //闭区间
if(postL>postR || inL>inR)
return NULL;
Node* root = new Node(post_nodes[postR]);
int rootPos=0;
for(int i=inL; i<=inR;i++){
if(in_nodes[i]==post_nodes[postR]){
rootPos = i;
break;
}
}
root->left = createTree(postL, postL+rootPos-inL-1, inL, rootPos-1);
root->right = createTree(postL+rootPos-inL, postR-1, rootPos+1, inR);
return root;
}
void levelTraversal(Node* root){
queue<Node*>q;
q.push(root);
Node* tmp;
int i=0;
while(!q.empty()){
tmp = q.front();
q.pop();
level_nodes[i++]=tmp->data;
if(tmp->left){
q.push(tmp->left);
}
if(tmp->right){
q.push(tmp->right);
}
}
}
int main(){
int num;
scanf("%d", &num);
for(int i=0;i<num;i++)
scanf("%d", &post_nodes[i]);
for(int i=0;i<num;i++)
scanf("%d", &in_nodes[i]);
Node* root = createTree(0, num-1, 0, num-1);
// 进行层序遍历
levelTraversal(root);
for(int i=0;i<num-1;i++){
printf("%d ", level_nodes[i]);
}
printf("%d\n",level_nodes[num-1]);
}
PAT 1020 Tree Traversals
最新推荐文章于 2024-06-15 16:46:40 发布