PAT A1099 Build a Binary Search Tree
思路:根结点默认为0,用静态数组建树,输入的键值进行递增排序。按照中序遍历的顺序对每个结点填入键值,最后BFS求得层序遍历答案。
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn = 105;
typedef struct {
int val, left, right;
} Node;
Node node[maxn];
int n, key[maxn], index;
void inOrder(int root) {
if(root == -1) return;
inOrder(node[root].left);
node[root].val = key[index++];
inOrder(node[root].right);
}
void BFS(int root) {
queue<int> q;
q.push(root);
while(!q.empty()) {
int temp = q.front();
q.pop();
printf("%d", node[temp].val);
index++;
if(index < n) printf(" ");
if(node[temp].left != -1) q.push(node[temp].left);
if(node[temp].right != -1) q.push(node[temp].right);
}
}
int main() {
scanf("%d", &n);
for(int i = 0; i < n; i++)
scanf("%d %d", &node[i].left, &node[i].right);
for(int i = 0; i < n; i++)
scanf("%d", &key[i]);
sort(key, key + n);
inOrder(0);
index = 0;
BFS(0);
return 0;
}