用C++ 编写先序创建二叉树函数,编写先序、中序和后序遍历二叉树的函数
时间: 2024-12-26 10:29:01 浏览: 15
在 C++ 中,我们可以使用结构体或类来表示二叉树节点,并分别编写函数用于创建二叉树、先序遍历、中序遍历和后序遍历。这里提供一个简单的例子:
```cpp
#include <iostream>
// 定义二叉树节点
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
// 先序遍历(根-左-右)
void preorderTraversal(TreeNode* root) {
if (root != nullptr) {
std::cout << root->val << " ";
preorderTraversal(root->left);
preorderTraversal(root->right);
}
}
// 中序遍历(左-根-右)
void inorderTraversal(TreeNode* root) {
if (root != nullptr) {
inorderTraversal(root->left);
std::cout << root->val << " ";
inorderTraversal(root->right);
}
}
// 后序遍历(左-右-根)
void postorderTraversal(TreeNode* root) {
if (root != nullptr) {
postorderTraversal(root->left);
postorderTraversal(root->right);
std::cout << root->val << " ";
}
}
// 创建二叉树函数(假设输入是一个整数数组,如{1, 2, 3, 4, 5},前两个元素作为根,以此类推)
TreeNode* createBinaryTree(int arr[], int n) {
if (n == 0) return nullptr;
TreeNode* root = new TreeNode(arr[0]);
int index = 1; // 开始从第二个元素查找子节点
for (int i = 0; i < n / 2; ++i) { // 如果数组长度是奇数,只有一边有子节点
if (arr[index * 2] > 0) {
root->left = createBinaryTree(arr + index * 2, n - index * 2);
}
if (arr[index * 2 + 1] > 0) {
root->right = createBinaryTree(arr + index * 2 + 1, n - index * 2 - 1);
}
index++;
}
return root;
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
TreeNode* tree = createBinaryTree(arr, n);
std::cout << "Preorder traversal: ";
preorderTraversal(tree);
std::cout << "\nInorder traversal: ";
inorderTraversal(tree);
std::cout << "\nPostorder traversal: ";
postorderTraversal(tree);
return 0;
}
```
阅读全文