用顺序存储结构来存储一颗具有n个结点的二叉树,编写算法实现对该二叉树进行先序遍历,输出先序遍历序列。用c语言实现
时间: 2023-06-14 12:05:19 浏览: 90
以下是利用顺序存储结构来实现二叉树先序遍历的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct TreeNode {
char data; // 节点数据
int left_child; // 左孩子在数组中的位置
int right_child; // 右孩子在数组中的位置
} TreeNode;
// 先序遍历二叉树
void pre_order_traversal(TreeNode* tree, int root) {
if (tree[root].data == '#') {
return; // 空节点,返回
}
printf("%c ", tree[root].data); // 输出节点数据
if (tree[root].left_child != -1) {
pre_order_traversal(tree, tree[root].left_child); // 遍历左子树
}
if (tree[root].right_child != -1) {
pre_order_traversal(tree, tree[root].right_child); // 遍历右子树
}
}
int main() {
TreeNode tree[MAX_SIZE];
int n; // 二叉树节点个数
printf("请输入二叉树的节点数: ");
scanf("%d", &n);
printf("请输入二叉树的节点信息(空节点用#表示):\n");
for (int i = 0; i < n; i++) {
char data;
int left_child, right_child;
scanf(" %c %d %d", &data, &left_child, &right_child);
tree[i].data = data;
tree[i].left_child = left_child;
tree[i].right_child = right_child;
}
printf("先序遍历序列为:");
pre_order_traversal(tree, 0); // 从根节点开始遍历
printf("\n");
return 0;
}
```
这里使用了一个结构体 `TreeNode` 来表示二叉树的每个节点,其中 `data` 表示节点的数据,`left_child` 和 `right_child` 分别表示左孩子和右孩子在数组中的位置。在主函数中,我们先读入二叉树的节点信息,然后调用 `pre_order_traversal` 函数进行先序遍历,输出先序遍历序列。
阅读全文