1•统计二叉树的叶节点个数。
时间: 2024-01-23 19:39:57 浏览: 39
统计二叉树的叶节点个数可以通过递归实现。具体的思路如下:
1. 如果当前节点为空,则返回0。
2. 如果当前节点是叶节点,则返回1。
3. 否则,递归统计左子树和右子树的叶节点个数,并将它们相加。
下面是代码实现:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def count_leaves(root):
if not root:
return 0
if not root.left and not root.right:
return 1
return count_leaves(root.left) + count_leaves(root.right)
```
其中 `TreeNode` 是二叉树节点的定义,`count_leaves` 函数接受一个二叉树的根节点作为参数,返回二叉树中叶节点的个数。
相关问题
1•统计二叉树的叶节点个数。c语音
可以使用递归的方式来统计二叉树的叶节点个数,具体代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树结点的定义
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 创建二叉树
TreeNode* createBinaryTree() {
int val;
scanf("%d", &val);
if (val == -1) { // -1表示该结点为空
return NULL;
}
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->val = val;
node->left = createBinaryTree();
node->right = createBinaryTree();
return node;
}
// 统计二叉树叶节点个数
int countLeafNodes(TreeNode* root) {
if (root == NULL) {
return 0;
}
if (root->left == NULL && root->right == NULL) {
return 1;
}
return countLeafNodes(root->left) + countLeafNodes(root->right);
}
int main() {
// 创建二叉树
printf("请输入二叉树结点的值(-1表示空结点):\n");
TreeNode* root = createBinaryTree();
// 统计叶节点个数
int count = countLeafNodes(root);
printf("叶节点个数为:%d\n", count);
return 0;
}
```
在该代码中,`createBinaryTree`函数用于创建二叉树,`countLeafNodes`函数用于递归统计二叉树的叶节点个数。具体来说,如果当前结点为空,则返回0;如果当前结点的左右子树都为空,则返回1;否则递归统计左右子树的叶节点个数并相加。最后,在`main`函数中,先创建二叉树,再统计叶节点个数并输出。
用递归算法统计二叉树的叶结点个数
递归算法是一种自己调用自己的算法,对于统计二叉树的叶结点个数,可以使用递归算法来实现。具体步骤如下:
1. 如果当前节点为NULL,返回0。
2. 如果当前节点的左右子节点都为NULL,说明当前节点是叶子节点,返回1。
3. 递归计算当前节点的左子树中叶结点的个数。
4. 递归计算当前节点的右子树中叶结点的个数。
5. 将步骤3和步骤4的结果相加,即为当前二叉树中叶结点的个数。
下面是具体的实现代码:
```
int countLeafNodes(TreeNode* root) {
if(root == NULL) {
return 0;
}
if(root->left == NULL && root->right == NULL) {
return 1;
}
int leftLeafNodes = countLeafNodes(root->left);
int rightLeafNodes = countLeafNodes(root->right);
return leftLeafNodes + rightLeafNodes;
}
```
其中,`TreeNode` 表示二叉树节点的结构体,包含 `val`、`left` 和 `right` 三个成员变量,分别表示节点的值、左子节点和右子节点。