模板,中+后建树,求层序遍历
#include <algorithm>
#include <bitset>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <functional>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>
using namespace std;
int n, a[50], b[50];
struct node {
int data;
struct node *left;
struct node *right;
};
struct node *creat(int al, int ar, int bl, int br) {//建树
if (al > ar || bl > br) return NULL;
int k;
struct node *root = new node;
for (int i = bl; i <= br; i++)
if (b[i] == a[ar]) {
k = i;
break;
}
root->data = a[ar];
root->left = creat(al, al + k - bl - 1, bl, k - 1);
root->right = creat(al + k - bl, ar - 1, k + 1, br);
return root;
}
bool flag;
void print(struct node *root) {//层序遍历
struct node *temp;
queue<struct node *> q;
q.push(root);
while (!q.empty()) {
temp = q.front();
q.pop();
if (!flag)
printf("%d", temp->data);
else
printf(" %d", temp->data);
flag = true;
if (temp->left != NULL) q.push(temp->left);
if (temp->right != NULL) q.push(temp->right);
}
return;
}
int main(int argc, char const *argv[]) {
cin >> n;
for (int i = 0; i < n; i++) cin >> a[i];
for (int i = 0; i < n; i++) cin >> b[i];
struct node *root = new node;
root = creat(0, n - 1, 0, n - 1);
print(root);
return 0;
}