C语言顺序存储二叉树求叶子结点
时间: 2024-01-13 10:46:36 浏览: 110
用C语言求二叉树叶子结点
4星 · 用户满意度95%
顺序存储二叉树是将二叉树的结点按照层次顺序依次存储在一维数组中,如果某个结点的下标为i,则它的左子结点下标为2i,右子结点下标为2i+1。如果数组下标从0开始,则左子结点下标为2i+1,右子结点下标为2i+2。
对于一个顺序存储的二叉树,如果一个结点的左右子树都为空,则它是叶子结点。因此,可以遍历数组中的每个结点,判断它是否为叶子结点,如果是,则统计计数器加1。
以下是求叶子结点数量的代码实现:
```c
#include <stdio.h>
#define MAXSIZE 100 // 定义数组最大长度
// 获取叶子结点数量
int getLeafNum(int tree[], int size) {
int count = 0; // 计数器
for (int i = 0; i < size; i++) {
// 判断该结点是否为叶子结点
if (tree[i] != -1 && tree[2 * i + 1] == -1 && tree[2 * i + 2] == -1) {
count++;
}
}
return count;
}
int main() {
int tree[MAXSIZE] = {1, 2, 3, -1, -1, 4, 5}; // 定义一个顺序存储的二叉树
int size = 7; // 数组中元素个数
int leafNum = getLeafNum(tree, size); // 获取叶子结点数量
printf("叶子结点数量:%d\n", leafNum);
return 0;
}
```
其中,tree数组存储了一个顺序存储的二叉树,-1表示该结点为空。size表示数组中元素的个数。getLeafNum函数用于获取叶子结点数量,遍历数组中的每个结点,判断它是否为叶子结点,如果是,则计数器加1。最终返回计数器的值。在主函数中,调用getLeafNum函数并输出结果。
阅读全文