用c语言采用二叉树递归遍历算法编程实现二叉树遍历(采用先序、中序和后序三遍历算法),通过键盘输入二叉树,生成一段完整代码
时间: 2024-10-27 16:02:26 浏览: 17
PHP基于非递归算法实现先序、中序及后序遍历二叉树操作示例
在C语言中,我们可以使用递归的方式来实现二叉树的先序、中序和后序遍历。首先,我们需要定义一个结构体`Node`表示二叉树节点,然后编写相应的函数来完成遍历。这里是一个简单的例子:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点
typedef struct Node {
int data;
struct Node* left;
struct Node* right;
} Node;
// 创建新节点
Node* newNode(int value) {
Node* node = (Node*)malloc(sizeof(Node));
if (!node)
return NULL;
node->data = value;
node->left = node->right = NULL;
return node;
}
// 先序遍历 (根-左-右)
void preOrder(Node* root) {
if (root != NULL) {
printf("%d ", root->data);
preOrder(root->left);
preOrder(root->right);
}
}
// 中序遍历 (左-根-右)
void inOrder(Node* root) {
if (root != NULL) {
inOrder(root->left);
printf("%d ", root->data);
inOrder(root->right);
}
}
// 后序遍历 (左-右-根)
void postOrder(Node* root) {
if (root != NULL) {
postOrder(root->left);
postOrder(root->right);
printf("%d ", root->data);
}
}
int main() {
// 输入二叉树的节点并构建树结构(假设输入的是节点值,这里仅作示例)
int n, val;
scanf("%d", &n);
if (n == 0)
return 0; // 如果输入为空,表示树空
Node* root = newNode(0); // 根节点
for (int i = 1; i < n; i++) {
scanf("%d", &val);
if (val < root->data)
root->left = newNode(val);
else
root->right = newNode(val);
}
// 遍历并打印结果
printf("Preorder traversal: ");
preOrder(root);
printf("\nInorder traversal: ");
inOrder(root);
printf("\nPostorder traversal: ");
postOrder(root);
return 0;
}
```
在这个代码中,用户需要在`main()`函数中输入节点值来构建二叉树,然后分别调用`preOrder()`, `inOrder()`, 和 `postOrder()` 来实现三种遍历方式。
阅读全文