如何用C++实现将一棵二叉树的左右子树互换,并提供前后二叉树的打印示例?在代码中,如果二叉树有左/右子树,也需要递归地对其子树进行同样的操作。
时间: 2024-12-21 16:23:29 浏览: 10
在C++中,你可以创建一个二叉树节点类`TreeNode`,然后提供一个成员函数`mirror()`来实现左右子树互换的操作。下面是一个简单的实现示例:
```cpp
#include <iostream>
// 二叉树节点类
class TreeNode {
public:
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 左右子树互换函数
void mirror(TreeNode*& node) {
if (node != nullptr) {
// 交换左右子树
std::swap(node->left, node->right);
// 递归处理子树
mirror(node->left);
mirror(node->right);
}
}
// 打印二叉树函数
void printTree(TreeNode* node) {
if (node != nullptr) {
printTree(node->left);
std::cout << node->val << " ";
printTree(node->right);
}
}
int main() {
// 创建一个二叉树实例
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->left = new TreeNode(4);
root->left->right = new TreeNode(5);
// 打印原二叉树
std::cout << "Original tree:\n";
printTree(root);
// 互换左右子树
mirror(root);
// 再次打印,现在应该是镜像了
std::cout << "\nMirrored tree:\n";
printTree(root);
return 0;
}
```
在这个例子中,首先我们创建了一个简单的二叉树,然后调用`mirror()`函数进行翻转,最后通过`printTree()`函数展示翻转前后的二叉树形态。
阅读全文