翻转二叉树和镜像树一样,就是你遍历的时候都是按照相反的顺序,先遍历右结点,然后再遍历左结点,这样你遍历的就是原树的镜像树了
#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define all(x) (x).begin(), (x).end()
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pa;
struct node {
int left, right;
} tree[15];
int n, cnt1, cnt2;
int Hash[15];
void layerorder(int root) {
queue<int> q;
q.push(root);
while (!q.empty()) {
int now = q.front(); q.pop();
cout << now << (cnt1++ < n - 1 ? " " : "\n");
if (tree[now].right != -1) q.push(tree[now].right);
if (tree[now].left != -1) q.push(tree[now].left);
}
}
void inorder(int root) {
if (root == -1) return;
inorder(tree[root].right);
cout << root << (cnt2++ < n - 1 ? " " : "\n");
inorder(tree[root].left);
}
int main() {
cin >> n;
int Hash[15] = {};
for (int i = 0; i < n; i++) {
char c1, c2;
getchar(); cin >> c1;
getchar(); cin >> c2;
if (isdigit(c1)) { Hash[c1 - '0'] = 1; tree[i].left = c1 - '0'; }
else tree[i].left = -1;
if (isdigit(c2)) { Hash[c2 - '0'] = 1; tree[i].right = c2 - '0'; }
else tree[i].right = -1;
}
int root;
for (int i = 0; i < n; i++) {
if (!Hash[i]) root = i;
}
layerorder(root);
inorder(root);
return 0;
}