如何使用C语言编写一个程序,通过递归实现键盘输入的二叉树的先序、中序和后序遍历?二叉树从键盘输入,用字母和#
时间: 2024-10-27 22:01:57 浏览: 47
在C语言中,我们可以使用递归函数结合用户键盘输入来实现二叉树的先序(根-左-右)、中序(左-根-右)和后序(左-右-根)遍历。首先,我们需要定义一个结构体表示二叉树节点,并创建对应的输入处理函数。
```c
#include <stdio.h>
#include <ctype.h>
// 定义二叉树节点
typedef struct TreeNode {
char data;
struct TreeNode* left;
struct TreeNode* right;
} Node;
// 创建新节点并获取输入
Node* createNode() {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
printf("Memory allocation failed.\n");
return NULL;
}
while (true) {
newNode->data = getchar();
if (newNode->data == '#' || isspace(newNode->data)) break; // 输入结束符或空格
newNode->left = newNode->right = NULL; // 初始化左右子树
}
return newNode;
}
// 递归遍历函数模板
void traversePreOrder(Node* node) {
if (node != NULL) {
printf("%c", node->data); // 先序遍历: 根
traversePreOrder(node->left);
traversePreOrder(node->right);
}
}
void traverseInOrder(Node* node) {
if (node != NULL) {
traverseInOrder(node->left);
printf("%c", node->data); // 中序遍历: 左
traverseInOrder(node->right);
}
}
void traversePostOrder(Node* node) {
if (node != NULL) {
traversePostOrder(node->left);
traversePostOrder(node->right);
printf("%c", node->data); // 后序遍历: 右
}
}
int main() {
Node* root = createNode(); // 获取二叉树根节点
if (root != NULL) {
printf("Pre-order traversal: ");
traversePreOrder(root);
printf("\n");
printf("In-order traversal: ");
traverseInOrder(root);
printf("\n");
printf("Post-order traversal: ");
traversePostOrder(root);
printf("\n");
}
free(root); // 释放内存
return 0;
}
```
当你运行这个程序时,它会提示你输入二叉树的结构,每输入一个字符代表一个节点,输入`#`表示节点结束。然后程序将显示三种遍历的结果。
阅读全文