使用构造函数实现二叉树遍历
时间: 2024-04-01 19:29:12 浏览: 59
使用构造函数实现二叉树遍历是一种常见的方法,可以通过构造函数来创建二叉树,并在构造函数中完成对二叉树的遍历操作。下面是一个示例代码:
```cpp
#include <iostream>
using namespace std;
// 二叉树节点的定义
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
// 二叉树类的定义
class BinaryTree {
public:
BinaryTree() : root(nullptr) {}
// 构造函数,通过传入的数组构建二叉树
BinaryTree(int arr[], int size) {
root = buildTree(arr, 0, size - 1);
}
// 前序遍历
void preorderTraversal() {
preorder(root);
cout << endl;
}
// 中序遍历
void inorderTraversal() {
inorder(root);
cout << endl;
}
// 后序遍历
void postorderTraversal() {
postorder(root);
cout << endl;
}
private:
TreeNode* root;
// 递归构建二叉树
TreeNode* buildTree(int arr[], int start, int end) {
if (start > end) {
return nullptr;
}
int mid = (start + end) / 2;
TreeNode* node = new TreeNode(arr[mid]);
node->left = buildTree(arr, start, mid - 1);
node->right = buildTree(arr, mid + 1, end);
return node;
}
// 前序遍历递归函数
void preorder(TreeNode* node) {
if (node == nullptr) {
return;
}
cout << node->val << " ";
preorder(node->left);
preorder(node->right);
}
// 中序遍历递归函数
void inorder(TreeNode* node) {
if (node == nullptr) {
return;
}
inorder(node->left);
cout << node->val << " ";
inorder(node->right);
}
// 后序遍历递归函数
void postorder(TreeNode* node) {
if (node == nullptr) {
return;
}
postorder(node->left);
postorder(node->right);
cout << node->val << " "; }
};
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7};
int size = sizeof(arr) / sizeof(arr[0]);
BinaryTree tree(arr, size);
cout << "前序遍历结果:";
tree.preorderTraversal();
cout << "中序遍历结果:";
tree.inorderTraversal();
cout << "后序遍历结果:";
tree.postorderTraversal();
return 0;
}
```
在上面的示例代码中,我们定义了一个二叉树类`BinaryTree`,其中包含了构造函数`BinaryTree(int arr[], int size)`,通过传入的数组构建二叉树。在构造函数中,我们使用了递归的方式来构建二叉树。同时,我们还定义了前序遍历、中序遍历和后序遍历的函数,通过调用这些函数可以实现对二叉树的遍历操作。
阅读全文