如何用数组实现二叉树的储存
时间: 2024-05-28 17:09:12 浏览: 13
可以使用数组来储存二叉树的信息,其中数组下标表示二叉树的节点编号,数组元素储存该节点的值,使用父节点、左子节点和右子节点的下标来表示节点之间的关系:
1. 如果节点编号为i,那么它的父节点编号为i/2;
2. 如果节点编号为i,那么它的左子节点编号为2*i;
3. 如果节点编号为i,那么它的右子节点编号为2*i+1。
这样,通过数组下标和对应的数值就可以表示整个二叉树了。
相关问题
设计c二叉树储存到一维数组
将二叉树按照完全二叉树的形式存储在一维数组中,可以使用以下方式:
1. 对于每个节点,它的索引为 i,它的左子节点的索引为 2i,它的右子节点的索引为 2i+1。
2. 对于根节点,它的索引为 1。
3. 如果一个节点没有左子节点或右子节点,那么对应的索引位置就为空。
下面是一个示例代码,实现了二叉树的建立、打印和查找功能。
```c
#include <stdio.h>
#define MAX_SIZE 100
int tree[MAX_SIZE];
// 创建二叉树
void create(int node, int value) {
if (tree[node] == -1) {
tree[node] = value;
printf("Add %d to tree[%d]\n", value, node);
} else if (value < tree[node]) {
create(node * 2, value);
} else {
create(node * 2 + 1, value);
}
}
// 打印二叉树
void print(int node, int depth) {
if (node > MAX_SIZE || tree[node] == -1) {
return;
}
print(node * 2 + 1, depth + 1);
for (int i = 0; i < depth; i++) {
printf(" ");
}
printf("%d\n", tree[node]);
print(node * 2, depth + 1);
}
// 查找二叉树
int find(int node, int value) {
if (tree[node] == -1) {
return -1;
} else if (value == tree[node]) {
return node;
} else if (value < tree[node]) {
return find(node * 2, value);
} else {
return find(node * 2 + 1, value);
}
}
int main() {
// 初始化二叉树
for (int i = 0; i < MAX_SIZE; i++) {
tree[i] = -1;
}
// 向二叉树中添加节点
create(1, 10);
create(1, 5);
create(1, 15);
create(1, 3);
create(1, 7);
create(1, 12);
create(1, 17);
// 打印二叉树
print(1, 0);
// 查找节点
int index = find(1, 7);
if (index == -1) {
printf("7 not found\n");
} else {
printf("7 found at index %d\n", index);
}
return 0;
}
```
输出结果如下:
```
17
15
12
10
7
5
3
7 found at index 11
```
二叉树顺序储存创建二叉树c语言
以下是C语言中二叉树顺序存储的创建方法:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_TREE_SIZE 100 // 二叉树的最大节点数
typedef char ElemType; // 假设二叉树节点的元素类型为字符型
// 二叉树的顺序存储结构体
typedef struct {
ElemType data[MAX_TREE_SIZE]; // 存储节点元素的数组
int length; // 二叉树的节点数
} SqBiTree;
// 创建二叉树的顺序存储结构
void CreateBiTree(SqBiTree *T) {
printf("请输入二叉树的节点数:");
scanf("%d", &(T->length));
printf("请输入二叉树的节点元素(按照层序遍历顺序输入,空节点用#表示):");
for (int i = 0; i < T->length; i++) {
scanf(" %c", &(T->data[i]));
}
}
int main() {
SqBiTree T;
CreateBiTree(&T);
return 0;
}
```