题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805440976633856
注意点
这道题一个是镜像树的概念(其实就是反转二叉树,本来还想用后序遍历重写一个的),结果复制粘贴代码稍微修改一下就行了
另一个是插入函数需要引用,不然不会对原根结点进行改变
代码
#include<algorithm>#include<vector>#include<cstdio>#include<iostream>using namespace std;int n;vector<int> pre(n), post(n), preM(n), postM(n), origin(n);struct Node{int data;Node *lchild;Node *rchild;};void preOrder(Node *root){if(root == NULL) return;pre.push_back(root->data);preOrder(root->lchild);preOrder(root->rchild);return;}void preOrderMirror(Node *root){if(root == NULL) return;preM.push_back(root->data);preOrderMirror(root->rchild);preOrderMirror(root->lchild);return;}void postOrder(Node *root){if(root == NULL) return;postOrder(root->lchild);postOrder(root->rchild);post.push_back(root->data);return;}void postOrderMirror(Node *root){if(root == NULL) return;postOrderMirror(root->rchild);postOrderMirror(root->lchild);postM.push_back(root->data);return;}void insert(Node *&root,int num){if(root == NULL){root = new Node;root->data = num;root->lchild = NULL;root->rchild = NULL;return;}if(num < root->data) insert(root->lchild, num);else insert(root->rchild, num);return;}int main(){Node *root = NULL;int temp_num;scanf("%d", &n);for(int i = 0; i < n; i++){scanf("%d",&temp_num);origin.push_back(temp_num);insert(root, temp_num);}preOrder(root);preOrderMirror(root);postOrder(root);postOrderMirror(root);if(origin == pre){printf("YES\n");for(int i = 0; i < post.size(); i++){printf("%d",post[i]);if(i != post.size() - 1) printf(" ");}} else if(origin == preM){printf("YES\n");for(int i = 0; i < postM.size(); i++){printf("%d",postM[i]);if(i != postM.size() - 1) printf(" ");}} else printf("NO\n");return 0;}
