题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805367987355648
有了上一题的基础,这题很快就过了,也没啥可说的,一个注意点是押入队列的时候不要忘了判断一下是否存在
代码
#include<cstdio>#include<iostream>#include<algorithm>#include<vector>#include<queue>using namespace std;const int maxn = 110;struct Node{int data, lchild, rchild;}node[maxn];int n, index = 0;int number[maxn];void in_order(int root){if(root == -1) return;in_order(node[root].lchild);node[root].data = number[index++];in_order(node[root].rchild);}void BFS(int root){queue<int> q;q.push(root);while(!q.empty()){int top = q.front();q.pop();printf("%d",node[top]);if(node[top].lchild != -1) q.push(node[top].lchild);if(node[top].rchild != -1) q.push(node[top].rchild);if(q.size() != 0) printf(" ");}}int main(){int lchild, rchild;scanf("%d",&n);for(int i = 0; i < n; i++){scanf("%d%d", &lchild, &rchild);node[i].lchild = lchild;node[i].rchild = rchild;}for(int i = 0; i < n; i++){scanf("%d",&number[i]);}sort(number, number + n);in_order(0);BFS(0);return 0;}
