用顺序存储结构来存储一颗具有n个结点的二叉树,编写算法实现对该二叉树进行先序遍历,输出先序遍历序列。用c语言实现
时间: 2024-05-11 18:20:05 浏览: 100
以下是用顺序存储结构实现二叉树先序遍历的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef char ElemType; // 假设二叉树结点数据类型为字符型
// 顺序存储结构定义二叉树
typedef struct {
ElemType data[MAXSIZE];
int n; // 记录二叉树结点个数
} SqBiTree;
// 初始化二叉树
void InitBiTree(SqBiTree *T) {
T->n = 0;
}
// 顺序存储结构按照完全二叉树的形式插入结点
int InsertBiTree(SqBiTree *T, ElemType e) {
if (T->n >= MAXSIZE) {
return 0; // 二叉树已满,插入失败
}
T->data[T->n++] = e;
return 1; // 插入成功
}
// 先序遍历
void PreOrderTraverse(SqBiTree T, int i) {
if (i >= T.n) {
return;
}
printf("%c ", T.data[i]); // 输出根结点
PreOrderTraverse(T, 2 * i + 1); // 遍历左子树
PreOrderTraverse(T, 2 * i + 2); // 遍历右子树
}
int main() {
SqBiTree T;
InitBiTree(&T);
InsertBiTree(&T, 'A');
InsertBiTree(&T, 'B');
InsertBiTree(&T, 'C');
InsertBiTree(&T, 'D');
InsertBiTree(&T, 'E');
InsertBiTree(&T, 'F');
InsertBiTree(&T, 'G');
printf("先序遍历序列为:");
PreOrderTraverse(T, 0);
printf("\n");
return 0;
}
```
在上述代码中,我们使用了一个数组来存储二叉树的结点数据,数据的存储方式是按照完全二叉树的形式插入的。先序遍历的实现使用了递归的方式,先输出当前结点的数据,再递归遍历左子树和右子树。
阅读全文