使用递归算法完成对一棵满二叉树的任务。用c++实现输出该二叉树,对该二叉树进行前序中序后序遍历,翻转这棵二叉树
时间: 2024-09-23 19:02:53 浏览: 51
非递归前序,中序,后序遍历二叉树(优化算法).rar_nooneyh_二叉树 非递归_前序 中序 后序_树遍历算法_遍历二叉树
在C++中,我们可以使用递归算法来操作满二叉树,并分别实现前序、中序和后序遍历,以及将二叉树进行翻转。首先,我们需要定义一个二叉树节点结构:
```cpp
#include <iostream>
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
```
接下来,我们依次编写相关的函数:
### 遍历二叉树
1. **前序遍历** (根-左-右):
```cpp
void preorderTraversal(TreeNode* root) {
if (root != NULL) {
std::cout << root->val << " ";
preorderTraversal(root->left);
preorderTraversal(root->right);
}
}
```
2. **中序遍历** (左-根-右):
```cpp
void inorderTraversal(TreeNode* root) {
if (root != NULL) {
inorderTraversal(root->left);
std::cout << root->val << " ";
inorderTraversal(root->right);
}
}
```
3. **后序遍历** (左-右-根):
```cpp
void postorderTraversal(TreeNode* root) {
if (root != NULL) {
postorderTraversal(root->left);
postorderTraversal(root->right);
std::cout << root->val << " ";
}
}
```
### 翻转二叉树
二叉树的翻转可以转换为交换每个节点的左右孩子,我们可以递归地处理这个问题:
```cpp
TreeNode* invertTree(TreeNode* root) {
if (root == nullptr) return nullptr;
TreeNode* temp = root->left; // 临时存储左孩子
root->left = invertTree(root->right); // 将右孩子变为新的左孩子
root->right = invertTree(temp); // 将原左孩子变为新的右孩子
return root;
}
```
现在你可以按照这个结构去创建一个满二叉树并测试这些函数了。
阅读全文