用c++编写程序,完成二义树的先序创建、先序遍历、中序遍历、后序遍历等操作
时间: 2023-12-04 15:04:27 浏览: 70
数据结构C++二叉树的先序遍历、中序遍历和后序遍历实现
5星 · 资源好评率100%
以下是用 C 语言编写的二叉树的先序创建、先序遍历、中序遍历、后序遍历的代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
char data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 先序创建二叉树
TreeNode* createTree() {
char ch;
scanf("%c", &ch);
if (ch == '#') { // '#' 表示该节点为空节点
return NULL;
}
TreeNode *node = (TreeNode*)malloc(sizeof(TreeNode));
node->data = ch;
node->left = createTree();
node->right = createTree();
return node;
}
// 先序遍历二叉树
void preOrder(TreeNode *root) {
if (root) {
printf("%c ", root->data);
preOrder(root->left);
preOrder(root->right);
}
}
// 中序遍历二叉树
void inOrder(TreeNode *root) {
if (root) {
inOrder(root->left);
printf("%c ", root->data);
inOrder(root->right);
}
}
// 后序遍历二叉树
void postOrder(TreeNode *root) {
if (root) {
postOrder(root->left);
postOrder(root->right);
printf("%c ", root->data);
}
}
int main() {
printf("请输入先序遍历序列:");
TreeNode *root = createTree();
printf("\n先序遍历结果:");
preOrder(root);
printf("\n中序遍历结果:");
inOrder(root);
printf("\n后序遍历结果:");
postOrder(root);
return 0;
}
```
示例输入:
```
请输入先序遍历序列:AB#D##CE#G##
```
示例输出:
```
先序遍历结果:A B D C E G
中序遍历结果:D B A E C G
后序遍历结果:D B G E C A
```
在此示例中,我们使用 '#' 表示空节点。输入的先序遍历序列为 "AB#D##CE#G##",表示根节点为 A,它的左子树为 B#D##,右子树为 E#G##。其中,B#D## 表示 B 为左子节点,D 为空节点,B 左子树为空,右子树为空。E#G## 表示 E 为右子节点,G 为空节点,E 左子树为空,右子树为空。最终构建的二叉树如下所示:
```
A
/ \
B E
\ \
D G
```
阅读全文