题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805367987355648
有了上一题的基础,这题很快就过了,也没啥可说的,一个注意点是押入队列的时候不要忘了判断一下是否存在

代码

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<algorithm>
  4. #include<vector>
  5. #include<queue>
  6. using namespace std;
  7. const int maxn = 110;
  8. struct Node{
  9. int data, lchild, rchild;
  10. }node[maxn];
  11. int n, index = 0;
  12. int number[maxn];
  13. void in_order(int root){
  14. if(root == -1) return;
  15. in_order(node[root].lchild);
  16. node[root].data = number[index++];
  17. in_order(node[root].rchild);
  18. }
  19. void BFS(int root){
  20. queue<int> q;
  21. q.push(root);
  22. while(!q.empty()){
  23. int top = q.front();
  24. q.pop();
  25. printf("%d",node[top]);
  26. if(node[top].lchild != -1) q.push(node[top].lchild);
  27. if(node[top].rchild != -1) q.push(node[top].rchild);
  28. if(q.size() != 0) printf(" ");
  29. }
  30. }
  31. int main(){
  32. int lchild, rchild;
  33. scanf("%d",&n);
  34. for(int i = 0; i < n; i++){
  35. scanf("%d%d", &lchild, &rchild);
  36. node[i].lchild = lchild;
  37. node[i].rchild = rchild;
  38. }
  39. for(int i = 0; i < n; i++){
  40. scanf("%d",&number[i]);
  41. }
  42. sort(number, number + n);
  43. in_order(0);
  44. BFS(0);
  45. return 0;
  46. }