求二叉树中叶子结点数目的递归算法
时间: 2024-01-23 12:12:43 浏览: 77
求二叉树中叶子节点数目的递归算法如下:
1. 如果二叉树为空,返回0。
2. 如果二叉树不为空,判断当前节点是否为叶子节点,如果是,返回1,否则递归计算左右子树的叶子节点数目之和。
代码如下所示(C++实现):
```
int LeafNodeNum(BTNode* root) {
if (root == NULL) {
return 0;
}
if (root->lchild == NULL && root->rchild == NULL) {
return 1;
}
return LeafNodeNum(root->lchild) + LeafNodeNum(root->rchild);
}
```
相关问题
用c语言,求二叉树中叶子结点数目的递归算法
在 C 语言中,你可以使用递归来计算二叉树中的叶子结点数目。
递归算法的思想是,如果当前结点是叶子结点,则将计数器加 1;否则,对当前结点的左子树和右子树分别调用递归函数,并将两个子树的计数器的和相加。
下面是一个示例代码:
```
int countLeafNodes(struct Node *node) {
if (node == NULL) {
return 0;
}
if (node->left == NULL && node->right == NULL) {
return 1;
}
return countLeafNodes(node->left) + countLeafNodes(node->right);
}
```
在上面的代码中,`struct Node` 是二叉树中结点的数据结构,其中 `left` 和 `right` 分别表示当前结点的左子结点和右子结点。
数据结构用递归算法计算二叉树中叶子结点数目的思想c语言程序,以二叉链表为存储结构, 试编写计算二叉树中叶子结点数目的递归算法....
好的,以下是计算二叉树中叶子结点数目的递归算法的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结构
typedef struct TreeNode {
int data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建二叉树
TreeNode* createTree() {
TreeNode *root = NULL;
int num;
scanf("%d", &num);
if (num != -1) { // 如果输入的值不是-1,则继续创建左右子树
root = (TreeNode*)malloc(sizeof(TreeNode));
root->data = num;
root->left = createTree();
root->right = createTree();
}
return root;
}
// 计算二叉树中叶子结点数目的递归算法
int countLeafNodes(TreeNode *root) {
if (root == NULL) { // 如果根节点为空,则返回0
return 0;
} else if (root->left == NULL && root->right == NULL) { // 如果根节点为叶子结点,则返回1
return 1;
} else { // 否则递归计算左右子树的叶子结点数目
return countLeafNodes(root->left) + countLeafNodes(root->right);
}
}
int main() {
printf("请输入二叉树中各个结点的值,-1表示该结点为空:\n");
TreeNode *root = createTree();
int num = countLeafNodes(root);
printf("二叉树中叶子结点的数目为:%d\n", num);
return 0;
}
```
以上程序利用递归算法计算二叉树中叶子结点的数目,对于每个结点,如果其左右子树都为空,则说明该结点是叶子结点,返回1;否则,递归计算左右子树的叶子结点数目并相加,最终得到整棵二叉树中叶子结点的数目。
阅读全文