建立一棵二叉树。对此树进行前序遍历、中序遍历及后序遍历,输出遍历序列。用vs2019
时间: 2024-05-01 09:21:54 浏览: 113
对所建立的二叉树分别进行先序、中序和后序遍历,并输出结果。
4星 · 用户满意度95%
好的,我可以为您提供一个简单的代码实现。请先确认您已经在 VS2019 中创建了一个控制台应用程序项目,并且已经添加了下面的头文件:
```c++
#include <iostream>
#include <vector>
```
接下来,您可以使用以下代码来定义二叉树节点:
```c++
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
```
然后,您可以使用以下代码来创建二叉树:
```c++
TreeNode* createTree() {
int val;
std::cin >> val;
if (val == -1) { // -1 表示空节点
return nullptr;
}
auto root = new TreeNode(val);
root->left = createTree();
root->right = createTree();
return root;
}
```
在创建二叉树时,您需要从控制台输入每个节点的值,如果该节点是空节点,则输入 -1。
接下来,您可以使用以下代码来进行前序遍历:
```c++
void preOrder(TreeNode* root, std::vector<int>& res) {
if (root == nullptr) {
return;
}
res.push_back(root->val);
preOrder(root->left, res);
preOrder(root->right, res);
}
```
在前序遍历中,您需要先访问根节点,然后递归地访问左子树和右子树。
接下来,您可以使用以下代码来进行中序遍历:
```c++
void inOrder(TreeNode* root, std::vector<int>& res) {
if (root == nullptr) {
return;
}
inOrder(root->left, res);
res.push_back(root->val);
inOrder(root->right, res);
}
```
在中序遍历中,您需要先递归地访问左子树,然后访问根节点,最后再递归地访问右子树。
最后,您可以使用以下代码来进行后序遍历:
```c++
void postOrder(TreeNode* root, std::vector<int>& res) {
if (root == nullptr) {
return;
}
postOrder(root->left, res);
postOrder(root->right, res);
res.push_back(root->val);
}
```
在后序遍历中,您需要先递归地访问左子树和右子树,最后访问根节点。
最后,您可以使用以下代码来测试上述函数:
```c++
int main() {
auto root = createTree();
std::vector<int> res;
preOrder(root, res);
std::cout << "Pre-order: ";
for (auto val : res) {
std::cout << val << " ";
}
std::cout << std::endl;
res.clear();
inOrder(root, res);
std::cout << "In-order: ";
for (auto val : res) {
std::cout << val << " ";
}
std::cout << std::endl;
res.clear();
postOrder(root, res);
std::cout << "Post-order: ";
for (auto val : res) {
std::cout << val << " ";
}
std::cout << std::endl;
return 0;
}
```
这样,您就可以在 VS2019 中运行这个程序并进行测试了。
阅读全文