请用c++帮我写二叉树三种遍历要求可以自己输入二叉树
时间: 2024-04-09 15:27:45 浏览: 87
当然,我可以帮助你编写一个程序,在程序中通过用户输入构建二叉树,并实现三种遍历方式。以下是使用 C++ 实现的示例代码:
```cpp
#include <iostream>
#include <queue>
using namespace std;
// 二叉树的节点结构
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int value) {
val = value;
left = nullptr;
right = nullptr;
}
};
// 构建二叉树
TreeNode* buildTree() {
int val;
cout << "请输入根节点的值(-1表示空节点):";
cin >> val;
if (val == -1) {
return nullptr;
}
TreeNode* root = new TreeNode(val);
cout << "请输入节点 " << val << " 的左子节点:";
root->left = buildTree();
cout << "请输入节点 " << val << " 的右子节点:";
root->right = buildTree();
return root;
}
// 递归实现前序遍历
void preorderTraversal(TreeNode* root) {
if (root == nullptr) {
return;
}
cout << root->val << " "; // 先访问根节点
preorderTraversal(root->left); // 再递归遍历左子树
preorderTraversal(root->right); // 最后递归遍历右子树
}
// 递归实现中序遍历
void inorderTraversal(TreeNode* root) {
if (root == nullptr) {
return;
}
inorderTraversal(root->left); // 先递归遍历左子树
cout << root->val << " "; // 再访问根节点
inorderTraversal(root->right); // 最后递归遍历右子树
}
// 递归实现后序遍历
void postorderTraversal(TreeNode* root) {
if (root == nullptr) {
return;
}
postorderTraversal(root->left); // 先递归遍历左子树
postorderTraversal(root->right); // 再递归遍历右子树
cout << root->val << " "; // 最后访问根节点
}
int main() {
TreeNode* root = buildTree(); // 构建二叉树
cout << "前序遍历结果:";
preorderTraversal(root);
cout << endl;
cout << "中序遍历结果:";
inorderTraversal(root);
cout << endl;
cout << "后序遍历结果:";
postorderTraversal(root);
cout << endl;
return 0;
}
```
在这段代码中,我们通过 `buildTree()` 函数实现了用户输入构建二叉树的功能。用户可以依次输入每个节点的值,-1 表示空节点。然后,我们使用递归的方式实现了前序、中序和后序遍历,并打印输出结果。
你可以尝试运行这段代码,并根据提示输入二叉树的节点值。程序会根据你的输入构建二叉树,并输出三种遍历方式的结果。
希望这可以满足你的需求!如果还有其他问题,请随时提问。
阅读全文