如何使用C语言编写一个程序,通过递归实现键盘输入的二叉树的先序、中序和后序遍历?二叉树从键盘输入
时间: 2024-10-26 20:17:24 浏览: 40
c代码-非递归实现二叉树的先序、中序、后序遍历
在C语言中,我们可以使用递归函数来实现二叉树的先序、中序和后序遍历。这里是一个简单的例子,假设我们已经有了一个结构体`Node`表示二叉树节点,并使用`scanf`从用户那里获取输入:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* left;
struct Node* right;
} Node;
// 创建新节点并初始化数据
Node* createNode(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode != NULL) {
newNode->data = value;
newNode->left = newNode->right = NULL;
}
return newNode;
}
// 递归函数:先序遍历
void preOrderTraversal(Node* node) {
if (node == NULL)
return;
printf("%d ", node->data); // 先访问根节点
preOrderTraversal(node->left); // 再访问左子树
preOrderTraversal(node->right); // 最后访问右子树
}
// 中序遍历
void inOrderTraversal(Node* node) {
if (node == NULL)
return;
inOrderTraversal(node->left);
printf("%d ", node->data);
inOrderTraversal(node->right);
}
// 后序遍历
void postOrderTraversal(Node* node) {
if (node == NULL)
return;
postOrderTraversal(node->left);
postOrderTraversal(node->right);
printf("%d ", node->data);
}
// 用户输入二叉树节点,这里仅支持单级输入,实际操作可能需要更复杂的处理
int main() {
Node* root = NULL; // 假设用户会输入一个空值结束输入
while (true) {
int value;
scanf("%d", &value);
if (value == -1) break; // 输入-1代表结束
Node* newNode = createNode(value);
if (root == NULL) {
root = newNode;
} else {
// 这里假设输入的是父子关系,实际需要根据具体输入调整
// 可能需要一个临时变量作为当前遍历到的节点
if (value > root->data) {
root->right = newNode;
} else {
root->left = newNode;
}
}
}
printf("先序遍历: ");
preOrderTraversal(root);
printf("\n");
printf("中序遍历: ");
inOrderTraversal(root);
printf("\n");
printf("后序遍历: ");
postOrderTraversal(root);
printf("\n");
return 0;
}
```
这个示例简化了用户输入的部分,实际应用中需要根据实际的输入格式(如字符串或逗号分隔的序列)设计解析函数。此外,用户输入二叉树的过程在这里并不完整,实际操作时你需要考虑如何构建完整的树结构。
阅读全文