题目
4.编程题4.1写出求二叉树[1]T中叶子个数的算法。fbox(添加照片)答题需要画图或者写计算过程的可在纸上完成,拍照成一张图上传(最多上传三张图片)。如需删除图片,可点击
4.编程题
4.1
写出求二叉树[1]T中叶子个数的算法。
$\fbox{添加照片}$
答题需要画图或者写计算过程的可在纸上完成,拍照成一
张图上传(最多上传三张图片)。如需删除图片,可点击
题目解答
答案
根据题意,需设计一个递归算法[2]计算二叉树中叶子节点的数量。核心逻辑如下:
1. 若当前节点为空,返回0。
2. 若当前节点是叶子节点(无左、右子树),返回1。
3. 否则,递归计算左子树和右子树的叶子节点数并相加。
完整代码如下:
```c
#include
#include
typedef struct Node {
int data;
struct Node *left, *right;
} Node;
Node* newNode(int data) {
Node* node = (Node*)malloc(sizeof(Node));
node->data = data;
node->left = node->right = NULL;
return node;
}
int CountLeaves(Node* root) {
if (root == NULL) return 0;
if (root->left == NULL && root->right == NULL) return 1;
return CountLeaves(root->left) + CountLeaves(root->right);
}
int main() {
Node* root = newNode(1);
root->left = newNode(2);
root->right = newNode(3);
root->left->left = newNode(4);
root->left->right = newNode(5);
root->right->right = newNode(6);
int leafCount = CountLeaves(root);
printf("叶子节点数: %d\n", leafCount); // 输出3
return 0;
}
```
该算法通过递归实现,时间复杂度为 $ O(n) $,空间复杂度为 $ O(h) $。对于示例树,叶子节点为4、5、6,总数为3。