用C语言编写完整代码用顺序存储结构来存储一颗具有n个结点的二叉树,编写算法实现对该二叉树进行先序遍历,输出先序遍历序列
时间: 2023-06-16 09:02:09 浏览: 47
以下是用C语言编写的完整代码,用顺序存储结构来存储一颗具有n个结点的二叉树,并实现对该二叉树进行先序遍历,输出先序遍历序列的算法:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct TreeNode {
char data;
} TreeNode;
// 顺序存储结构
typedef struct {
TreeNode nodes[MAXSIZE];
int size;
} SeqBinaryTree;
// 初始化二叉树
void init(SeqBinaryTree *tree) {
tree->size = 0;
}
// 获取某个结点的父结点
TreeNode* parent(SeqBinaryTree *tree, int index) {
if (index == 0) {
return NULL;
} else {
return &(tree->nodes[(index - 1) / 2]);
}
}
// 获取某个结点的左孩子
TreeNode* leftChild(SeqBinaryTree *tree, int index) {
int leftChildIndex = 2 * index + 1;
if (leftChildIndex >= tree->size) {
return NULL;
} else {
return &(tree->nodes[leftChildIndex]);
}
}
// 获取某个结点的右孩子
TreeNode* rightChild(SeqBinaryTree *tree, int index) {
int rightChildIndex = 2 * index + 2;
if (rightChildIndex >= tree->size) {
return NULL;
} else {
return &(tree->nodes[rightChildIndex]);
}
}
// 先序遍历二叉树
void preOrder(SeqBinaryTree *tree, int index) {
if (index >= tree->size) {
return;
}
printf("%c ", tree->nodes[index].data);
preOrder(tree, index * 2 + 1);
preOrder(tree, index * 2 + 2);
}
int main() {
SeqBinaryTree tree;
init(&tree);
// 添加结点
TreeNode node1 = {'A'};
tree.nodes[0] = node1;
tree.size++;
TreeNode node2 = {'B'};
tree.nodes[1] = node2;
tree.size++;
TreeNode node3 = {'C'};
tree.nodes[2] = node3;
tree.size++;
TreeNode node4 = {'D'};
tree.nodes[3] = node4;
tree.size++;
TreeNode node5 = {'E'};
tree.nodes[4] = node5;
tree.size++;
TreeNode node6 = {'F'};
tree.nodes[5] = node6;
tree.size++;
TreeNode node7 = {'G'};
tree.nodes[6] = node7;
tree.size++;
TreeNode node8 = {'H'};
tree.nodes[7] = node8;
tree.size++;
// 先序遍历二叉树
preOrder(&tree, 0);
return 0;
}
```
输出结果为: A B D H E F C G