用顺序数组存储结构来存储一颗有n个节点的二叉树,编写c语言算法实现对该二叉树进行先序遍历,输出先序遍历序列。
时间: 2023-06-13 15:09:14 浏览: 163
假设顺序数组存储结构按照完全二叉树的方式存储,即从上到下、从左到右依次存储每个节点,那么可以通过以下方式进行先序遍历:
```c
#include <stdio.h>
#define MAX_SIZE 100 // 定义数组最大容量
int tree[MAX_SIZE]; // 存储二叉树的顺序数组
int n; // 二叉树节点个数
void pre_order(int i) { // i为当前节点在数组中的下标
if (i >= n || tree[i] == -1) { // 递归结束条件:越界或该节点为空
return;
}
printf("%d ", tree[i]); // 先序遍历该节点
pre_order(i * 2 + 1); // 递归遍历左子树
pre_order(i * 2 + 2); // 递归遍历右子树
}
int main() {
// 读入二叉树节点个数和各节点的值
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &tree[i]);
}
// 先序遍历并输出
pre_order(0);
printf("\n");
return 0;
}
```
在上面的代码中,我们通过递归的方式实现了先序遍历二叉树。每次递归遍历到一个节点时,先输出该节点的值,然后递归遍历其左右子树。由于顺序数组存储结构中,一个节点的左子节点下标为该节点下标的两倍加一,右子节点下标为该节点下标的两倍加二,因此递归遍历左右子树时,只需要将下标按照上述公式计算即可。
阅读全文
相关推荐















