//
// main.cpp
// PATA1119
//
// Created by Phoenix on 2018/2/24.
// Copyright © 2018年 Phoenix. All rights reserved.
//
#include <iostream>
#include <cstdio>
int n, pre[33], post[33];
struct Node {
int data;
Node *lchild, *rchild;
};
Node* newnode(int x) {
Node* root = new Node;
root->data = x;
root->lchild = root->rchild = NULL;
return root;
}
bool flag = true;
Node* create(int preL, int preR, int postL, int postR) {
if(preL > preR) return NULL;
//printf("%d ", pre[preL]);
Node* root = newnode(pre[preL]);
if(preL < preR && pre[preL + 1] == post[postR - 1]) flag = false;
if(preL < preR){
int k;
for(int i = postL; i <= postR; i++) {
if(post[i] == pre[preL + 1]) k = i;
}
root->lchild = create(preL + 1, preL + 1 + k - postL, postL, k);
root->rchild = create(preL + 2 + k - postL, preR, k + 1, postR - 1);
}
return root;
}
int num = 0;
void inorder(Node* root) {
if(root == NULL) return;
inorder(root->lchild);
printf("%d", root->data);
if(num < n - 1) printf(" ");
else printf("\n");
num++;
inorder(root->rchild);
}
int main(int argc, const char * argv[]) {
scanf("%d", &n);
for(int i = 0; i < n; i++) {
scanf("%d", &pre[i]);
}
for(int i = 0; i < n; i++) {
scanf("%d", &post[i]);
}
Node* root = create(0, n - 1, 0, n - 1);
if(flag) printf("Yes\n");
else printf("No\n");
inorder(root);
return 0;
}
PATA1119题解
最新推荐文章于 2021-06-17 20:06:20 发布