C语言顺序存储二叉树的遍历
时间: 2023-10-29 21:03:26 浏览: 47
顺序存储二叉树是一种特殊的二叉树存储方式,它使用一个一维数组来表示二叉树。假设二叉树的根节点存储在数组下标为1的位置,那么对于任意一个下标为i的节点,其左子节点的下标为2i,右子节点的下标为2i+1。这种存储方式可以方便地实现二叉树的遍历操作,包括前序遍历、中序遍历和后序遍历。
下面是C语言实现顺序存储二叉树的前序遍历、中序遍历和后序遍历的代码:
```c
#include <stdio.h>
#define MAX_SIZE 100 // 最大节点数
int tree[MAX_SIZE]; // 存储二叉树的数组
int size; // 当前二叉树的节点数
// 前序遍历
void preorder(int index) {
if (index >= size) return; // 超出节点数,返回
printf("%d ", tree[index]); // 输出当前节点
preorder(index * 2); // 遍历左子树
preorder(index * 2 + 1); // 遍历右子树
}
// 中序遍历
void inorder(int index) {
if (index >= size) return; // 超出节点数,返回
inorder(index * 2); // 遍历左子树
printf("%d ", tree[index]); // 输出当前节点
inorder(index * 2 + 1); // 遍历右子树
}
// 后序遍历
void postorder(int index) {
if (index >= size) return; // 超出节点数,返回
postorder(index * 2); // 遍历左子树
postorder(index * 2 + 1); // 遍历右子树
printf("%d ", tree[index]); // 输出当前节点
}
int main() {
// 构建二叉树
size = 10;
for (int i = 1; i <= size; i++) {
tree[i] = i;
}
// 前序遍历
printf("前序遍历:");
preorder(1);
printf("\n");
// 中序遍历
printf("中序遍历:");
inorder(1);
printf("\n");
// 后序遍历
printf("后序遍历:");
postorder(1);
printf("\n");
return 0;
}
```
上面的代码中,我们先构建了一个包含10个节点的二叉树,然后依次调用前序遍历、中序遍历和后序遍历函数,输出遍历结果。在遍历函数中,我们使用递归来遍历二叉树,对于每个节点,先输出当前节点,然后遍历其左右子树。注意在递归函数中,我们要判断当前节点是否超出了二叉树的节点数,如果超出了就直接返回。