1、假设二叉树中的每个结点值为单个字符,采用顺序存储结构存储。设计一个算法,求二叉树t中的叶子结点个数。生成代码,使用C语言
时间: 2024-03-01 13:56:07 浏览: 62
西南交通大学-数据结构实验报告-求二叉树某结点在先序、中序、后序遍历中的访问次序
以下是求二叉树叶子结点个数的C语言代码:
```c
#include <stdio.h>
#define MAXSIZE 100 // 定义二叉树的最大结点数
typedef struct BiTNode { // 定义二叉树结点结构体
char data; // 结点元素值
int lchild, rchild; // 左右子树结点下标(采用顺序存储结构)
} BiTNode, BiTree[MAXSIZE];
int countLeaf(BiTree t, int root) { // 递归计算叶子结点个数
if (root == -1) { // 空树或叶子结点
return 0;
} else if (t[root].lchild == -1 && t[root].rchild == -1) { // 叶子结点
return 1;
} else { // 非叶子结点
return countLeaf(t, t[root].lchild) + countLeaf(t, t[root].rchild);
}
}
int main() {
BiTree t = {
{'+', 1, 2}, {'*', 3, 4}, {'-', 5, -1}, {'a', -1, -1}, {'b', -1, -1}, {'c', -1, -1}
}; // 示例二叉树
int root = 0; // 根结点下标
int leafCount = countLeaf(t, root); // 计算叶子结点个数
printf("The number of leaf nodes in the binary tree is: %d\n", leafCount);
return 0;
}
```
以上代码中,我们定义了一个二叉树结点结构体 `BiTNode`,其中包含结点元素值 `data` 和左右子树结点下标 `lchild`、`rchild`,表示当前结点的左右子树在顺序存储结构中的下标。然后我们定义了一个 `BiTree` 数组,用于存储二叉树的所有结点。在 `main` 函数中,我们初始化了一个示例二叉树,并调用 `countLeaf` 函数计算叶子结点个数。`countLeaf` 函数是一个递归函数,用于遍历二叉树并计算叶子结点个数。如果当前结点为空(即树为空)或为叶子结点,则返回 0 或 1;否则返回左子树和右子树的叶子结点个数之和。最终输出计算得到的叶子结点个数。
阅读全文