二叉树的顺序存储结构的代码
时间: 2023-07-13 08:24:17 浏览: 98
二叉树的顺序存储结构通常使用数组来实现,每个节点的左子节点在数组中的下标为 2*i+1,右子节点在数组中的下标为 2*i+2,父节点在数组中的下标为 (i-1)/2。以下是二叉树的顺序存储结构的代码示例:
```
#define MAXSIZE 100 // 数组的最大长度
typedef struct TreeNode {
char data; // 节点的数据
} TreeNode;
TreeNode tree[MAXSIZE]; // 用数组来存储二叉树
// 返回节点在数组中的下标
int getIndex(int i) {
return i-1;
}
// 创建二叉树
void createTree(char data[], int len) {
for (int i = 0; i < len; i++) {
tree[getIndex(i)].data = data[i];
}
}
// 访问节点
void visit(TreeNode node) {
printf("%c ", node.data);
}
// 先序遍历
void preOrder(int i) {
if (i >= MAXSIZE || tree[getIndex(i)].data == '\0') {
return;
}
visit(tree[getIndex(i)]); // 访问根节点
preOrder(2*i+1); // 遍历左子树
preOrder(2*i+2); // 遍历右子树
}
// 中序遍历
void inOrder(int i) {
if (i >= MAXSIZE || tree[getIndex(i)].data == '\0') {
return;
}
inOrder(2*i+1); // 遍历左子树
visit(tree[getIndex(i)]); // 访问根节点
inOrder(2*i+2); // 遍历右子树
}
// 后序遍历
void postOrder(int i) {
if (i >= MAXSIZE || tree[getIndex(i)].data == '\0') {
return;
}
postOrder(2*i+1); // 遍历左子树
postOrder(2*i+2); // 遍历右子树
visit(tree[getIndex(i)]); // 访问根节点
}
```
需要注意的是,这种存储方式需要提前确定二叉树的节点数,因此在创建二叉树时需要指定节点数。同时,由于数组的大小是固定的,因此节点数不能超过数组的最大长度。
阅读全文