统计二叉树的叶子结点个数
时间: 2023-12-17 10:25:40 浏览: 87
好的,这是一个经典的二叉树问题。统计二叉树的叶子结点个数可以通过递归实现。具体思路是,如果当前节点为空,则返回0;如果当前节点是叶子节点,则返回1;否则,递归计算左子树和右子树的叶子节点个数,然后将它们相加即可。
以下是 Python 代码实现:
```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: TreeNode) -> int:
if not root:
return 0
if not root.left and not root.right:
return 1
return count_leaves(root.left) + count_leaves(root.right)
```
相关问题
求二叉树叶子结点个数
求二叉树叶子节点的个数,可以通过递归遍历二叉树,然后统计叶子节点的个数来实现。具体实现可以参考以下代码:
``` python
# 定义二叉树结构体
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
# 定义统计叶子节点个数的函数
def count_leaf_node(root):
if not root:
return 0
if not root.left and not root.right:
# 如果当前节点没有左右子节点,说明当前节点是叶子节点
return 1
# 递归遍历左右子树,统计叶子节点个数
return count_leaf_node(root.left) + count_leaf_node(root.right)
# 测试样例
if __name__ == '__main__':
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
root.right.left = TreeNode(6)
print(count_leaf_node(root)) # 输出:3
```
在上述代码中,我们定义了一个二叉树结构体 `TreeNode`,其中包含节点的值 `val`,以及左右子节点 `left` 和 `right`。接着,我们定义了一个函数 `count_leaf_node`,这个函数用来统计二叉树的叶子节点个数。在函数中,我们首先判断当前节点是否为空,如果为空,则返回 0。然后,我们判断当前节点是否为叶子节点,如果是,则返回 1。最后,我们递归遍历当前节点的左右子树,并累加左右子树的叶子节点个数,最终得到二叉树的叶子节点个数。在最后的测试样例中,我们构建了一个二叉树,并统计了它的叶子节点个数,输出结果为 3。
请你以程序员的身份用C++语言编写可以运行的统计二叉树中结点个数和叶子结点个数的算法
好的,以下是用C++语言编写的统计二叉树中结点个数和叶子结点个数的算法:
```c++
#include<iostream>
using namespace std;
//定义二叉树结点
struct TreeNode{
int val; //结点值
TreeNode* left; //左子节点指针
TreeNode* right; //右子节点指针
TreeNode(int x):val(x),left(NULL),right(NULL){} //结构体构造函数
};
//统计二叉树结点个数的函数
int countNodes(TreeNode* root){
if(root == NULL) return 0; //如果根节点为空,返回0
return 1 + countNodes(root->left) + countNodes(root->right); //递归求取左右子树结点个数并加上当前结点,返回总结点个数
}
//统计二叉树叶子结点个数的函数
int countLeaves(TreeNode* root){
if(root == NULL) return 0; //如果根节点为空,返回0
if(root->left == NULL && root->right == NULL) return 1; //如果当前节点为叶子结点,返回1
return countLeaves(root->left) + countLeaves(root->right); //递归求取左右子树叶子结点个数并返回总叶子结点个数
}
int main(){
//构建如下二叉树
/*
1
/ \
2 3
/ \ / \
4 5 6 7
*/
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->left = new TreeNode(4);
root->left->right = new TreeNode(5);
root->right->left = new TreeNode(6);
root->right->right = new TreeNode(7);
//测试统计二叉树结点个数的函数
int node_num = countNodes(root);
cout<<"二叉树结点个数为:"<<node_num<<endl;
//测试统计二叉树叶子结点个数的函数
int leaf_num = countLeaves(root);
cout<<"二叉树叶子结点个数为:"<<leaf_num<<endl;
return 0;
}
```
运行结果:
```
二叉树结点个数为:7
二叉树叶子结点个数为:4
```
以上就是本题的C++实现,希望对您有所帮助!