#include <stdlib.h>
#include <stdio.h>
typedef struct _node{
int value;
struct _node *left;
struct _node *right;
}Node;
int *pre, *in, n;
void buildTree(Node* root, int ins, int pres, int num){
if(num == 1)return;
int p = 0;
for(int i=ins; i<ins+num; i++){
if(in[i] == root->value) p = i;
}
if(p>ins){
pres += 1; num += (1-p);
Node
* leftchild
= (Node
*)malloc(sizeof(Node
)); leftchild->value = pre[pres];
root->left = leftchild;
leftchild->left = NULL; leftchild->right = NULL;
buildTree(leftchild,ins,pres,num);
}
if(p<ins+num-1){
num += (ins-p); pres += (p+1-ins); ins = (p-ins+1);
Node
* rightchild
= (Node
*)malloc(sizeof(Node
)); rightchild->value = pre[pres];
root->right = rightchild;
rightchild->left = NULL; rightchild->right = NULL;
buildTree(rightchild,ins,pres,num);
}
}
void print_in_post_order(Node* root){
if(root != NULL){
print_in_post_order(root->left);
print_in_post_order(root->right);
}
}
int main(){
pre
= (int*)malloc(sizeof(int)*n
); in
= (int*)malloc(sizeof(int)*n
); for(int i
=0; i
<n
; i
++)scanf("%d",&in
[i
]); for(int i
=0; i
<n
; i
++)scanf("%d",&pre
[i
]); Node
* root
= (Node
*)malloc(sizeof(Node
)); root->value = pre[0]; root->left = NULL; root->right = NULL;
buildTree(root,0,0,n);
print_in_post_order(root);
return 0;
}
I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkaW8uaD4KdHlwZWRlZiBzdHJ1Y3QgX25vZGV7CiAgICBpbnQgdmFsdWU7CiAgICBzdHJ1Y3QgX25vZGUgKmxlZnQ7CiAgICBzdHJ1Y3QgX25vZGUgKnJpZ2h0Owp9Tm9kZTsKaW50ICpwcmUsICppbiwgbjsKdm9pZCBidWlsZFRyZWUoTm9kZSogcm9vdCwgaW50IGlucywgaW50IHByZXMsIGludCBudW0pewogICAgaWYobnVtID09IDEpcmV0dXJuOwogICAgaW50IHAgPSAwOwogICAgZm9yKGludCBpPWluczsgaTxpbnMrbnVtOyBpKyspewogICAgICAgIGlmKGluW2ldID09IHJvb3QtPnZhbHVlKSBwID0gaTsKICAgIH0KICAgIGlmKHA+aW5zKXsKICAgICAgICBwcmVzICs9IDE7IG51bSArPSAoMS1wKTsKICAgICAgICBOb2RlKiBsZWZ0Y2hpbGQgPSAoTm9kZSopbWFsbG9jKHNpemVvZihOb2RlKSk7CiAgICAgICAgbGVmdGNoaWxkLT52YWx1ZSA9IHByZVtwcmVzXTsKICAgICAgICByb290LT5sZWZ0ID0gbGVmdGNoaWxkOwogICAgICAgIGxlZnRjaGlsZC0+bGVmdCA9IE5VTEw7IGxlZnRjaGlsZC0+cmlnaHQgPSBOVUxMOwogICAgICAgIGJ1aWxkVHJlZShsZWZ0Y2hpbGQsaW5zLHByZXMsbnVtKTsKICAgIH0KICAgIGlmKHA8aW5zK251bS0xKXsKICAgICAgICBudW0gKz0gKGlucy1wKTsgcHJlcyArPSAocCsxLWlucyk7IGlucyA9IChwLWlucysxKTsgCiAgICAgICAgTm9kZSogcmlnaHRjaGlsZCA9IChOb2RlKiltYWxsb2Moc2l6ZW9mKE5vZGUpKTsKICAgICAgICByaWdodGNoaWxkLT52YWx1ZSA9IHByZVtwcmVzXTsKICAgICAgICByb290LT5yaWdodCA9IHJpZ2h0Y2hpbGQ7CiAgICAgICAgcmlnaHRjaGlsZC0+bGVmdCA9IE5VTEw7IHJpZ2h0Y2hpbGQtPnJpZ2h0ID0gTlVMTDsKICAgICAgICBidWlsZFRyZWUocmlnaHRjaGlsZCxpbnMscHJlcyxudW0pOwogICAgfQp9CnZvaWQgcHJpbnRfaW5fcG9zdF9vcmRlcihOb2RlKiByb290KXsKICAgIGlmKHJvb3QgIT0gTlVMTCl7CiAgICAgICAgcHJpbnRfaW5fcG9zdF9vcmRlcihyb290LT5sZWZ0KTsKICAgICAgICBwcmludF9pbl9wb3N0X29yZGVyKHJvb3QtPnJpZ2h0KTsKICAgICAgICBwcmludGYoIiVkICIscm9vdC0+dmFsdWUpOwogICAgICAgIGZyZWUocm9vdCk7CiAgICB9Cn0KaW50IG1haW4oKXsKICAgIHNjYW5mKCIlZCIsJm4pOwogICAgcHJlID0gKGludCopbWFsbG9jKHNpemVvZihpbnQpKm4pOwogICAgaW4gPSAoaW50KiltYWxsb2Moc2l6ZW9mKGludCkqbik7CiAgICBmb3IoaW50IGk9MDsgaTxuOyBpKyspc2NhbmYoIiVkIiwmaW5baV0pOwogICAgZm9yKGludCBpPTA7IGk8bjsgaSsrKXNjYW5mKCIlZCIsJnByZVtpXSk7CiAgICBOb2RlKiByb290ID0gKE5vZGUqKW1hbGxvYyhzaXplb2YoTm9kZSkpOwogICAgcm9vdC0+dmFsdWUgPSBwcmVbMF07IHJvb3QtPmxlZnQgPSBOVUxMOyByb290LT5yaWdodCA9IE5VTEw7CiAgICBidWlsZFRyZWUocm9vdCwwLDAsbik7CiAgICBwcmludF9pbl9wb3N0X29yZGVyKHJvb3QpOwogICAgcHJpbnRmKCJcbiIpOwogICAgcmV0dXJuIDA7Cn0K