c语言二叉树顺序存储和基本操作并求出特定结点的左孩子和右孩子
时间: 2023-11-14 18:06:16 浏览: 41
二叉树的顺序存储通常使用一维数组来实现,对于一个下标为i的结点,它的左孩子的下标为2i,右孩子的下标为2i+1,父节点的下标为i/2。
下面是基本的二叉树操作的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结点
typedef struct TreeNode {
int data;
} TreeNode;
// 初始化二叉树
void init(TreeNode* tree, int size) {
for (int i = 0; i < size; i++) {
tree[i].data = 0;
}
}
// 插入结点
void insert(TreeNode* tree, int index, int data) {
tree[index].data = data;
}
// 获取左孩子结点
TreeNode* leftChild(TreeNode* tree, int index) {
int leftIndex = 2 * index;
if (leftIndex >= sizeof(tree)) {
return NULL;
}
return &tree[leftIndex];
}
// 获取右孩子结点
TreeNode* rightChild(TreeNode* tree, int index) {
int rightIndex = 2 * index + 1;
if (rightIndex >= sizeof(tree)) {
return NULL;
}
return &tree[rightIndex];
}
int main() {
int size = 10;
TreeNode* tree = (TreeNode*)malloc(size * sizeof(TreeNode));
init(tree, size);
insert(tree, 1, 10);
insert(tree, 2, 20);
insert(tree, 3, 30);
TreeNode* left = leftChild(tree, 1);
if (left != NULL) {
printf("left child of node 1: %d\n", left->data);
}
TreeNode* right = rightChild(tree, 1);
if (right != NULL) {
printf("right child of node 1: %d\n", right->data);
}
free(tree);
return 0;
}
```
在这个示例中,我们首先定义了一个结构体`TreeNode`来表示二叉树的结点,结点中包含了一个整数`data`。然后,我们定义了几个基本操作,包括初始化二叉树、插入结点、获取左孩子结点和获取右孩子结点。
在`main`函数中,我们首先创建了一个大小为10的二叉树,然后插入了几个结点。接着,我们使用`leftChild`和`rightChild`函数分别获取了结点1的左孩子和右孩子,并打印出了它们的值。
注意,在这个示例中,我们假设二叉树中的结点数据都是整数,如果结点数据类型为其他类型,则需要相应地修改代码。同时,我们也没有考虑动态扩展数组的情况,如果插入的结点超过了数组大小,则程序可能会出错。