// 结构体指针
#include <bits/stdc++.h>
using namespace std;
struct TreeNode { // 定义二叉树的结点结构体
int val; // 结点的值
TreeNode *left; // 左子结点
TreeNode *right; // 右子结点
TreeNode() : val(INT_MIN), left(nullptr), right(nullptr) {} // 构造函数
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} // 构造函数
TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} // 构造函数
};
TreeNode* invertTree(TreeNode* root) {
if (root == nullptr) { // 如果二叉树为空
return nullptr; // 返回空指针
}
TreeNode* left = invertTree(root->left); // 将左子树的根结点赋值给指针变量left
TreeNode* right = invertTree(root->right); // 将右子树的根结点赋值给指针变量right
root->left = right; // 将指针变量right赋值给结点root的左子结点
root->right = left; // 将指针变量left赋值给结点root的右子结点
return root; // 返回结点root
}
TreeNode *buildTree(vector<int> &nums, int index) { // 建立二叉树
if (index >= int(nums.size())) { // 如果index大于等于数组nums的长度
return nullptr; // 返回空指针
}
TreeNode *root = new TreeNode(nums[index]); // 创建二叉树的根结点
root->left = buildTree(nums, 2 * index + 1); // 创建二叉树的左子树
root->right = buildTree(nums, 2 * index + 2); // 创建二叉树的右子树
return root; // 返回结点root
}
void printLevelOrder(TreeNode *root) { // 层序遍历输出
if (!root) return;
queue<TreeNode *> que;
que.push(root);
while (!que.empty()) {
TreeNode *p = que.front();
que.pop();
cout << p->val << " ";
if (p->left) que.push(p->left);
if (p->right) que.push(p->right);
}
}
void printPreOrder(TreeNode *root) { // 先序遍历输出
if (!root) return;
cout << root->val << " ";
printPreOrder(root->left);
printPreOrder(root->right);
}
void printInOrder(TreeNode *root) { // 中序遍历输出
if (!root) return;
printInOrder(root->left);
cout << root->val << " ";
printInOrder(root->right);
}
void printPostOrder(TreeNode *root) { // 后序遍历输出
if (!root) return;
printPostOrder(root->left);
printPostOrder(root->right);
cout << root->val << " ";
}
int main() {
int num;
vector<int> nums; // 定义vector容器nums
while(cin >> num) nums.push_back(num); // 输入二叉树的结点值
TreeNode *root = buildTree(nums, 0); // 建立二叉树
TreeNode *ans = invertTree(root); // 将函数invertTree的返回值赋值给指针变量ans
printLevelOrder(ans); // 层序遍历输出
return 0;
}