题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805440976633856

注意点

这道题一个是镜像树的概念(其实就是反转二叉树,本来还想用后序遍历重写一个的),结果复制粘贴代码稍微修改一下就行了
另一个是插入函数需要引用,不然不会对原根结点进行改变

代码

  1. #include<algorithm>
  2. #include<vector>
  3. #include<cstdio>
  4. #include<iostream>
  5. using namespace std;
  6. int n;
  7. vector<int> pre(n), post(n), preM(n), postM(n), origin(n);
  8. struct Node{
  9. int data;
  10. Node *lchild;
  11. Node *rchild;
  12. };
  13. void preOrder(Node *root){
  14. if(root == NULL) return;
  15. pre.push_back(root->data);
  16. preOrder(root->lchild);
  17. preOrder(root->rchild);
  18. return;
  19. }
  20. void preOrderMirror(Node *root){
  21. if(root == NULL) return;
  22. preM.push_back(root->data);
  23. preOrderMirror(root->rchild);
  24. preOrderMirror(root->lchild);
  25. return;
  26. }
  27. void postOrder(Node *root){
  28. if(root == NULL) return;
  29. postOrder(root->lchild);
  30. postOrder(root->rchild);
  31. post.push_back(root->data);
  32. return;
  33. }
  34. void postOrderMirror(Node *root){
  35. if(root == NULL) return;
  36. postOrderMirror(root->rchild);
  37. postOrderMirror(root->lchild);
  38. postM.push_back(root->data);
  39. return;
  40. }
  41. void insert(Node *&root,int num){
  42. if(root == NULL){
  43. root = new Node;
  44. root->data = num;
  45. root->lchild = NULL;
  46. root->rchild = NULL;
  47. return;
  48. }
  49. if(num < root->data) insert(root->lchild, num);
  50. else insert(root->rchild, num);
  51. return;
  52. }
  53. int main(){
  54. Node *root = NULL;
  55. int temp_num;
  56. scanf("%d", &n);
  57. for(int i = 0; i < n; i++){
  58. scanf("%d",&temp_num);
  59. origin.push_back(temp_num);
  60. insert(root, temp_num);
  61. }
  62. preOrder(root);
  63. preOrderMirror(root);
  64. postOrder(root);
  65. postOrderMirror(root);
  66. if(origin == pre){
  67. printf("YES\n");
  68. for(int i = 0; i < post.size(); i++){
  69. printf("%d",post[i]);
  70. if(i != post.size() - 1) printf(" ");
  71. }
  72. } else if(origin == preM){
  73. printf("YES\n");
  74. for(int i = 0; i < postM.size(); i++){
  75. printf("%d",postM[i]);
  76. if(i != postM.size() - 1) printf(" ");
  77. }
  78. } else printf("NO\n");
  79. return 0;
  80. }