用c语言编写一个程序,编写二叉树,输入一串字母,以先序,中序,后序三种遍历方式打印出来
时间: 2024-12-21 21:24:53 浏览: 14
在C语言中,我们可以创建一个简单的二叉搜索树(BST)结构,并分别实现先序、中序和后序遍历来打印输入字符串的字母。这里我们假设输入的是小写字母,并且只包含英文字母。
首先,我们需要定义一个二叉树节点结构:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
char data;
struct TreeNode* left;
struct TreeNode* right;
} Node;
Node* createNode(char data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed.\n");
return NULL;
}
newNode->data = data;
newNode->left = newNode->right = NULL;
return newNode;
}
// 先序遍历函数
void preOrderTraversal(Node* root, void (*print)(char)) {
if (root != NULL) {
print(root->data);
preOrderTraversal(root->left, print);
preOrderTraversal(root->right, print);
}
}
// 中序遍历函数
void inOrderTraversal(Node* root, void (*print)(char)) {
if (root != NULL) {
inOrderTraversal(root->left, print);
print(root->data);
inOrderTraversal(root->right, print);
}
}
// 后序遍历函数
void postOrderTraversal(Node* root, void (*print)(char)) {
if (root != NULL) {
postOrderTraversal(root->left, print);
postOrderTraversal(root->right, print);
print(root->data);
}
}
int main() {
// 输入字符串
char str[50];
printf("Enter a string of lowercase letters: ");
fgets(str, sizeof(str), stdin);
// 将字符串转换为字符数组,并删除末尾的换行符
size_t len = strlen(str);
str[len - 1] = '\0'; // Assuming no newline character is present
// 构建二叉搜索树
Node* root = createNode(str[0]);
for (size_t i = 1; i < len; i++) {
insertNode(&root, str[i]);
}
// 打印先序遍历结果
printf("\nPreorder traversal: ");
preOrderTraversal(root, printf);
// 打印中序遍历结果
printf("\nInorder traversal: ");
inOrderTraversal(root, printf);
// 打印后序遍历结果
printf("\nPostorder traversal: ");
postOrderTraversal(root, printf);
// 清理内存
freeTree(root);
return 0;
}
```
在这个示例中,`insertNode()` 和 `freeTree()` 函数用于插入新节点和释放内存,但由于篇幅原因未在此给出。你可以根据需要添加这两个辅助函数。
运行这个程序,它会提示用户输入一个字符串,然后按照先序、中序和后序遍历的方式打印出该字符串中的字母。
阅读全文