三、实验要求 1.要求采用二叉链表作为存贮结构,完成二叉树的建立、先序、中序、和后序遍历的操作。其中先序遍历和后序遍历采用递归算法,中序遍历采用非递归算法。 2.输入数据:树中每个结点的数据类型设定为字符型。的全部代码
时间: 2023-06-25 13:05:02 浏览: 167
以下是使用二叉链表实现二叉树的建立、先序、中序和后序遍历的代码,其中先序遍历和后序遍历采用递归算法,中序遍历采用非递归算法。
```c++
#include <iostream>
#include <stack>
using namespace std;
// 二叉树结点定义
struct TreeNode {
char data;
TreeNode *left;
TreeNode *right;
};
// 先序遍历(递归)
void preOrderTraversal(TreeNode *root) {
if (root == NULL) {
return;
}
cout << root->data << " ";
preOrderTraversal(root->left);
preOrderTraversal(root->right);
}
// 中序遍历(非递归)
void inOrderTraversal(TreeNode *root) {
stack<TreeNode*> s;
TreeNode *p = root;
while (p != NULL || !s.empty()) {
if (p != NULL) {
s.push(p);
p = p->left;
} else {
p = s.top();
s.pop();
cout << p->data << " ";
p = p->right;
}
}
}
// 后序遍历(递归)
void postOrderTraversal(TreeNode *root) {
if (root == NULL) {
return;
}
postOrderTraversal(root->left);
postOrderTraversal(root->right);
cout << root->data << " ";
}
// 二叉树建立
void createTree(TreeNode *&root) {
char ch;
cin >> ch;
if (ch == '#') {
root = NULL;
} else {
root = new TreeNode;
root->data = ch;
createTree(root->left);
createTree(root->right);
}
}
int main() {
TreeNode *root;
createTree(root);
cout << "先序遍历结果:";
preOrderTraversal(root);
cout << endl;
cout << "中序遍历结果:";
inOrderTraversal(root);
cout << endl;
cout << "后序遍历结果:";
postOrderTraversal(root);
cout << endl;
return 0;
}
```
以上代码实现了二叉树的建立、先序、中序和后序遍历。其中,建立二叉树时,输入'#'表示该结点为空;先序遍历和后序遍历采用递归算法,中序遍历采用非递归算法。
阅读全文