有c++编写以下程序:编写一个程序prac3-2.cpp,实现二叉树的先序遍历、中序 遍历和后序遍历的递归算法,以及中序遍历的非递归算法。并对图1 所示的二叉树b给出求解结果.
时间: 2024-12-14 20:22:27 浏览: 53
在C++中,你可以使用递归和非递归的方式分别实现二叉树的三种遍历算法:先序遍历(Preorder Traversal)、中序遍历(Inorder Traversal)和后序遍历(Postorder Traversal)。这里是一个简单的例子,我们将使用结构体`TreeNode`表示二叉树节点:
```cpp
#include <iostream>
using namespace std;
// 定义二叉树节点
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 递归遍历函数
void preorderTraversal(TreeNode* root) {
if (root != NULL) {
cout << root->val << " "; // 先访问根节点
preorderTraversal(root->left); // 然后左子树
preorderTraversal(root->right); // 最后右子树
}
}
void inorderTraversal(TreeNode* root) {
if (root != NULL) {
inorderTraversal(root->left); // 首先左子树
cout << root->val << " "; // 然后访问根节点
inorderTraversal(root->right); // 最后右子树
}
}
void postorderTraversal(TreeNode* root) {
if (root != NULL) {
postorderTraversal(root->left); // 先左子树
postorderTraversal(root->right); // 然后右子树
cout << root->val << " "; // 最后访问根节点
}
}
// 中序遍历非递归版本(使用栈)
void inorderTraversalNonRecursive(TreeNode* root) {
stack<TreeNode*> s;
TreeNode* curr = root;
while (curr != NULL || !s.empty()) {
while (curr != NULL) {
s.push(curr);
curr = curr->left;
}
curr = s.top();
s.pop();
cout << curr->val << " ";
curr = curr->right;
}
}
int main() {
// 构建示例二叉树 b
// 图1的具体结构需要你自己定义,这里仅提供基础构造函数作为模板
TreeNode* b = new TreeNode(1);
b->left = new TreeNode(2);
b->right = new TreeNode(3);
b->left->left = new TreeNode(4);
b->left->right = new TreeNode(5);
cout << "Preorder traversal: ";
preorderTraversal(b);
cout << endl;
cout << "Inorder traversal: ";
inorderTraversal(b);
cout << endl;
cout << "Postorder traversal: ";
postorderTraversal(b);
cout << endl;
cout << "Inorder traversal (non-recursive): ";
inorderTraversalNonRecursive(b);
cout << endl;
return 0;
}
```
运行此程序后,会根据给定的二叉树结构打印出相应的遍历结果。注意,你需要自己补充图1所示的二叉树的具体结构。
阅读全文
相关推荐


















