c语言编写一段程序,1.通过输入数据,建立一个排序二叉树;每输入一个数据重新显示二叉树的结构。 2.输入完毕后,对排序二叉树进行中序遍历,给出排序结果。注意输入需要为字符型,请在最后举例说明输入来成功运行程序
时间: 2024-02-12 18:02:56 浏览: 55
好的,这是一个关于排序二叉树的 C 语言编写的程序,实现以下两个功能:
1. 通过输入数据,建立一个排序二叉树;每输入一个数据重新显示二叉树的结构。
2. 输入完毕后,对排序二叉树进行中序遍历,给出排序结果。注意输入需要为字符型,请在最后举例说明输入来成功运行程序。
首先,我们可以定义一个节点结构体,用于表示二叉树的节点:
```c
struct Node {
char data;
struct Node* left;
struct Node* right;
};
```
然后,我们可以定义一个函数用于添加节点:
```c
void add_node(struct Node** root, char data) {
if (*root == NULL) {
*root = (struct Node*)malloc(sizeof(struct Node));
(*root)->data = data;
(*root)->left = NULL;
(*root)->right = NULL;
} else if (data < (*root)->data) {
add_node(&((*root)->left), data);
} else {
add_node(&((*root)->right), data);
}
}
```
我们还需要定义一个函数用于中序遍历:
```c
void inorder_traversal(struct Node* root) {
if (root != NULL) {
inorder_traversal(root->left);
printf("%c ", root->data);
inorder_traversal(root->right);
}
}
```
最后,我们可以在主函数中使用以上两个函数来实现输入字符型数据、构建排序二叉树并实时显示二叉树的结构的功能。当输入空字符时,循环结束并输出中序遍历的结果,示例代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
struct Node {
char data;
struct Node* left;
struct Node* right;
};
void add_node(struct Node** root, char data) {
if (*root == NULL) {
*root = (struct Node*)malloc(sizeof(struct Node));
(*root)->data = data;
(*root)->left = NULL;
(*root)->right = NULL;
} else if (data < (*root)->data) {
add_node(&((*root)->left), data);
} else {
add_node(&((*root)->right), data);
}
}
void inorder_traversal(struct Node* root) {
if (root != NULL) {
inorder_traversal(root->left);
printf("%c ", root->data);
inorder_traversal(root->right);
}
}
int main() {
struct Node* root = NULL;
char data;
while (1) {
printf("请输入一个字符:");
scanf(" %c", &data);
if (data == '\0') {
break;
}
add_node(&root, data);
inorder_traversal(root);
printf("\n");
}
inorder_traversal(root);
printf("\n");
return 0;
}
```
举例说明,如果我们依次输入字符"b"、"a"、"d"、"c"、"e",则程序会输出以下结果:
```
请输入一个字符:b
b
请输入一个字符:a
a b
请输入一个字符:d
a b d
请输入一个字符:c
a b c d
请输入一个字符:e
a b c d e
a b c d e
```
最后,程序会输出一次中序遍历的结果:
```
a b c d e
```
这就是一个简单的排序二叉树的 C 语言实现。
阅读全文