用C语言写出二又树先根遍历、中根遍历和后根遍历函数
时间: 2024-12-22 20:04:59 浏览: 10
好的,我很乐意为您用C语言实现二叉树的先根遍历、中根遍历和后根遍历函数。以下是相应的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构
typedef struct TreeNode {
char data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建新节点
TreeNode* createNode(char data) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->data = data;
newNode->left = newNode->right = NULL;
return newNode;
}
// 先根遍历
void preOrder(TreeNode* root) {
if (root == NULL) return;
printf("%c ", root->data);
preOrder(root->left);
preOrder(root->right);
}
// 中根遍历
void inOrder(TreeNode* root) {
if (root == NULL) return;
inOrder(root->left);
printf("%c ", root->data);
inOrder(root->right);
}
// 后根遍历
void postOrder(TreeNode* root) {
if (root == NULL) return;
postOrder(root->left);
postOrder(root->right);
printf("%c ", root->data);
}
// 主函数示例
int main() {
/*
A
/ \
B C
/ \ \
D E F
*/
TreeNode* root = createNode('A');
root->left = createNode('B');
root->right = createNode('C');
root->left->left = createNode('D');
root->left->right = createNode('E');
root->right->right = createNode('F');
printf("先根遍历: ");
preOrder(root);
printf("\n");
printf("中根遍历: ");
inOrder(root);
printf("\n");
printf("后根遍历: ");
postOrder(root);
printf("\n");
return 0;
}
```
这段代码实现了以下功能:
1. 定义了二叉树节点结构 `TreeNode`。
2. 实现了创建新节点的函数 `createNode`。
3. 实现了先根遍历 `preOrder`、中根遍历 `inOrder` 和后根遍历 `postOrder` 函数。
4. 在 `main` 函数中创建了一个示例二叉树,并演示了三种遍历方法的使用。
这三种遍历方法的输出结果分别是:
```
先根遍历: A B D E C F
中根遍历: D B E A C F
后根遍历: D E B F C A
```
这三种遍历方法的主要区别在于访问根节点的顺序:
- 先根遍历: 访问根节点 -> 遍历左子树 -> 遍历右子树
- 中根遍历: 遍历左子树 -> 访问根节点 -> 遍历右子树
- 后根遍历: 遍历左子树 -> 遍历右子树 -> 访问根节点
阅读全文