树的中序遍历与层序遍历
//
// main.cpp
// PATA1099
//
// Created by Phoenix on 2018/2/22.
// Copyright © 2018年 Phoenix. All rights reserved.
//
#include <iostream>
#include <cstdio>
#include <queue>
#include <algorithm>
using namespace std;
const int maxn = 110;
int n, a[maxn];
struct node {
int data;
int lchild, rchild;
}node[maxn];
int num = 0;
void inorder(int root) {
if(root == -1) return;
inorder(node[root].lchild);
node[root].data = a[num++];
inorder(node[root].rchild);
}
void levelorder(int root) {
queue<int> q;
q.push(root);
num = 0;
while (!q.empty()) {
int top = q.front();
q.pop();
printf("%d", node[top].data);
if(num < n - 1) printf(" ");
else printf("\n");
num++;
if(node[top].lchild != -1) q.push(node[top].lchild);
if(node[top].rchild != -1) q.push(node[top].rchild);
}
}
int main(int argc, const char * argv[]) {
scanf("%d", &n);
for(int i = 0; i < n; i++) {
scanf("%d %d", &node[i].lchild, &node[i].rchild);
}
for(int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
sort(a, a + n);
inorder(0);
levelorder(0);
return 0;
}