c语言初始化一个数据元素为字符串类型的二叉树,并对其实现创建及先序、中序、后序三种遍历。
时间: 2023-12-10 12:40:27 浏览: 27
以下是C语言实现一个数据元素为字符串类型的二叉树,并对其实现创建及先序、中序、后序三种遍历的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义二叉树结点结构体
typedef struct TreeNode {
char data[20];
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建二叉树
TreeNode *createTree()
{
char data[20];
printf("请输入结点的值(输入#表示结束): ");
scanf("%s", data);
if (strcmp(data, "#") == 0) {
return NULL;
} else {
TreeNode *node = (TreeNode *) malloc(sizeof(TreeNode));
strcpy(node->data, data);
node->left = createTree();
node->right = createTree();
return node;
}
}
// 先序遍历
void preOrder(TreeNode *root)
{
if (root == NULL) {
return;
}
printf("%s ", root->data);
preOrder(root->left);
preOrder(root->right);
}
// 中序遍历
void inOrder(TreeNode *root)
{
if (root == NULL) {
return;
}
inOrder(root->left);
printf("%s ", root->data);
inOrder(root->right);
}
// 后序遍历
void postOrder(TreeNode *root)
{
if (root == NULL) {
return;
}
postOrder(root->left);
postOrder(root->right);
printf("%s ", root->data);
}
int main()
{
TreeNode *root = createTree();
printf("先序遍历结果: ");
preOrder(root);
printf("\n中序遍历结果: ");
inOrder(root);
printf("\n后序遍历结果: ");
postOrder(root);
printf("\n");
return 0;
}
```
运行结果如下:
```
请输入结点的值(输入#表示结束): A
请输入结点的值(输入#表示结束): B
请输入结点的值(输入#表示结束): #
请输入结点的值(输入#表示结束): #
请输入结点的值(输入#表示结束): C
请输入结点的值(输入#表示结束): D
请输入结点的值(输入#表示结束): #
请输入结点的值(输入#表示结束): #
请输入结点的值(输入#表示结束): #
先序遍历结果: A B C D
中序遍历结果: B A D C
后序遍历结果: B D C A
```