用c语言采用二叉树递归遍历算法编程实现二叉树遍历(采用先序、中序和后序三遍历算法),键盘输入二叉树,生成一段完整代码
时间: 2024-10-27 17:02:23 浏览: 29
在C语言中,我们通常使用结构体来表示二叉树节点,并通过递归的方式实现先序(根-左-右)、中序(左-根-右)和后序(左-右-根)三种遍历。这里是一个简单的示例,假设有一个名为`Node`的结构体,其中包含`value`, `left` 和 `right` 的成员:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct Node {
int value;
struct Node* left;
struct Node* right;
} TreeNode;
// 创建新节点
TreeNode* createNode(int value) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
if (newNode != NULL) {
newNode->value = value;
newNode->left = newNode->right = NULL;
}
return newNode;
}
// 先序遍历(根-左-右)
void preorderTraversal(TreeNode* node) {
if (node != NULL) {
printf("%d ", node->value); // 访问当前节点
preorderTraversal(node->left); // 递归遍历左子树
preorderTraversal(node->right); // 递归遍历右子树
}
}
// 中序遍历(左-根-右)
void inorderTraversal(TreeNode* node) {
if (node != NULL) {
inorderTraversal(node->left); // 递归遍历左子树
printf("%d ", node->value); // 访问当前节点
inorderTraversal(node->right); // 递归遍历右子树
}
}
// 后序遍历(左-右-根)
void postorderTraversal(TreeNode* node) {
if (node != NULL) {
postorderTraversal(node->left); // 递归遍历左子树
postorderTraversal(node->right); // 递归遍历右子树
printf("%d ", node->value); // 访问当前节点
}
}
// 主函数,键盘输入构建二叉树并进行遍历
int main() {
TreeNode* root = NULL;
int input;
// 输入二叉树节点值,直到0结束
while (scanf("%d", &input) && input != 0) {
root = createNode(input);
if (input) { // 如果不是0,说明还有子节点
scanf("%d %d", &input, &input); // 输入左右子节点值
root->left = createNode(input);
root->right = createNode(input);
}
}
printf("Preorder Traversal: ");
preorderTraversal(root);
printf("\nInorder Traversal: ");
inorderTraversal(root);
printf("\nPostorder Traversal: ");
postorderTraversal(root);
// 清理内存
free(root);
return 0;
}
```
你可以复制上述代码到C文件中运行,然后按提示输入二叉树的节点值来进行遍历。记得输入每个节点之后,再输入其两个子节点的值(如果有的话)。最后,别忘了释放分配给节点的内存以避免内存泄漏。
阅读全文