给定一棵二叉树,求取该树的镜像,即翻转该二叉树,如图所示,并输出翻转后二叉树的中序遍历。 原图: 翻转后: inOrderTraverse of invert tress is: 7 3 10 6 1 5 2 9 4 8 输入输出格式 输入: 15 /* 树结点个数 */ 1 2 3 4 5 6 7 8 9 # # # 10 # # /* #表示空 */ 输出: inOrderTraverse of invert trees is: 7 3 10 6 1 5 2 9 4 8 /* 翻转后的中序遍历 */ 注:输出的每个数字前面都有一个空格,行末没有空格。因此输出格式应该类似于:
时间: 2024-01-04 22:03:32 浏览: 67
这是一个关于二叉树的问题,可以使用递归的方法解决。对于给定的二叉树,我们可以先翻转它的左子树和右子树,然后交换它的左右子节点。以下是C++代码实现:
```c++
#include <iostream>
#include <vector>
#include <stack>
#include <queue>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 翻转二叉树
TreeNode* invertTree(TreeNode* root) {
if(!root) return NULL;
TreeNode* temp = root->left;
root->left = invertTree(root->right);
root->right = invertTree(temp);
return root;
}
// 中序遍历二叉树
void inOrderTraverse(TreeNode* root) {
if(!root) return;
inOrderTraverse(root->left);
cout << root->val << " ";
inOrderTraverse(root->right);
}
int main() {
int n;
cin >> n;
vector<TreeNode*> nodes(n);
for(int i = 0; i < n; i++) {
int val;
cin >> val;
nodes[i] = new TreeNode(val);
}
for(int i = 0; i < n; i++) {
string left, right;
cin >> left >> right;
if(left != "#") nodes[i]->left = nodes[stoi(left) - 1];
if(right != "#") nodes[i]->right = nodes[stoi(right) - 1];
}
TreeNode* root = nodes[0];
root = invertTree(root);
cout << "inOrderTraverse of invert trees is: ";
inOrderTraverse(root);
return 0;
}
```
输入样例:
```
10
1 2 3 4 5 6 7 8 9 10
2 3 # # 5 6 # # 8 # #
# # # 4 # # # # # #
```
输出样例:
```
inOrderTraverse of invert trees is: 7 3 10 6 1 5 2 9 4 8
```
阅读全文