用c语音建立一棵用二叉链表方式存储的二叉树,并实现对其进行先序、中序、后序三种方法遍历,输出遍历结果
时间: 2023-06-13 18:02:28 浏览: 93
下面是用 C 语言实现二叉树的代码,同时包含了三种遍历方式的函数实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树结点的定义
typedef struct node {
char data;
struct node *left;
struct node *right;
} Node;
// 构造二叉树
Node *buildTree()
{
Node *p = NULL;
char ch;
scanf("%c", &ch); // 输入一个字符
if (ch == '#') // 如果是 #,表示这里没有结点
p = NULL;
else {
p = (Node *)malloc(sizeof(Node)); // 新建一个结点
p->data = ch; // 赋值
p->left = buildTree(); // 递归构造左子树
p->right = buildTree(); // 递归构造右子树
}
return p;
}
// 先序遍历
void preOrder(Node *root)
{
if (root != NULL) {
printf("%c ", root->data); // 访问根结点
preOrder(root->left); // 遍历左子树
preOrder(root->right); // 遍历右子树
}
}
// 中序遍历
void inOrder(Node *root)
{
if (root != NULL) {
inOrder(root->left); // 遍历左子树
printf("%c ", root->data); // 访问根结点
inOrder(root->right); // 遍历右子树
}
}
// 后序遍历
void postOrder(Node *root)
{
if (root != NULL) {
postOrder(root->left); // 遍历左子树
postOrder(root->right); // 遍历右子树
printf("%c ", root->data); // 访问根结点
}
}
int main()
{
Node *root = NULL;
printf("请输入一棵二叉树,用 # 表示空结点:\n");
root = buildTree();
printf("先序遍历结果:");
preOrder(root);
printf("\n");
printf("中序遍历结果:");
inOrder(root);
printf("\n");
printf("后序遍历结果:");
postOrder(root);
printf("\n");
return 0;
}
```
上述代码中,我们通过 `buildTree()` 函数构造了一棵二叉树,并通过 `preOrder()`、`inOrder()` 和 `postOrder()` 实现了先序、中序、后序三种遍历方式的输出。
阅读全文