模板题,考察建树和遍历的基本操作
坑点:注意输出格式,建立变量num记录已输出的节点,最后一个节点后没有空格
AC代码如下
#include <iostream>
#include <queue>
using namespace std;
const int max_n = 40;
int n,post[max_n],in[max_n];
struct node{
int data;
node *lchild,*rchild;
};
node* newNode(int k){
node* root = new node;
root->data = k;
root->lchild = NULL;
root->rchild = NULL;
}
node* creat(int postL,int postR,int inL,int inR){
if(postL > postR) return NULL;
node* root = new node;
root->data = post[postR];
int k;
for(k = inL ; k <= inR ; k++){
if(in[k] == post[postR]) break;
}
root->lchild = creat(postL,postL + k - inL - 1,inL,k-1);
root->rchild = creat(postL + k -inL, postR - 1 ,k + 1, inR);
return root;
}
int num = 0;
void layerorder(node* root){
queue<node*> q;
q.push(root);
while(!q.empty()){
node* now = q.front();
q.pop();
printf("%d",now->data);
num++;
if(num < n ) printf(" ");
if(now->lchild != NULL) q.push(now->lchild);
if(now->rchild != NULL) q.push(now->rchild);
}
}
int main(){
cin>>n;
for(int i = 0 ; i < n; i++){
cin>>post[i];
}
for(int i = 0 ; i < n; i++){
cin>>in[i];
}
node* root = creat(0,n-1,0,n-1);
layerorder(root);
return 0;
}