任意创建一棵二叉树,统计该二叉树的叶子结点数C++代码

时间: 2023-09-08 11:05:28 浏览: 43
### 回答1: 二叉树的叶子结点是指没有子节点的结点,因此可以使用递归的方式进行统计。下面是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 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() { // 创建二叉树 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 leafNodes = countLeafNodes(root); cout << "The number of leaf nodes is: " << leafNodes << endl; return 0; } ``` 输出结果为: ``` The number of leaf nodes is: 4 ``` ### 回答2: 二叉树是一种树形结构,其中每个节点最多有两个子节点,分别称为左子节点和右子节点。 以下是一个任意创建的二叉树及统计叶子节点数的代码: ```python class Node: def __init__(self, data): self.data = data self.left = None self.right = None def count_leaves(root): if root is None: return 0 if root.left is None and root.right is None: return 1 return count_leaves(root.left) + count_leaves(root.right) # 创建二叉树 root = Node(1) root.left = Node(2) root.right = Node(3) root.left.left = Node(4) root.left.right = Node(5) root.right.left = Node(6) root.right.right = Node(7) # 统计二叉树的叶子节点数 leaves = count_leaves(root) print("叶子节点数为:", leaves) ``` 在上述代码中,我们首先定义了一个`Node`类,用于表示二叉树节点。每个节点包含一个`data`数据和两个子节点`left`和`right`。 然后,我们定义了一个`count_leaves`函数,用于统计二叉树的叶子节点数。这个函数使用递归的方式遍历二叉树,如果当前节点为空,则返回0;如果当前节点没有左子节点和右子节点,则返回1;否则,递归统计左子树和右子树的叶子节点数,并相加返回。 接下来,我们创建了一棵任意的二叉树,并调用`count_leaves`函数统计叶子节点数,最后输出结果。 ### 回答3: 创建二叉树的代码如下所示: ```python class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right # 创建二叉树 def create_binary_tree(nodes): if not nodes: return None n = len(nodes) root = TreeNode(nodes[0]) queue = [root] i = 1 while i < n: node = queue.pop(0) if nodes[i]: left_child = TreeNode(nodes[i]) node.left = left_child queue.append(left_child) i += 1 if i < n and nodes[i]: right_child = TreeNode(nodes[i]) node.right = right_child queue.append(right_child) i += 1 return root # 统计叶子节点数 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) ``` 例如,我们可以创建以下二叉树: ``` 1 / \ 2 3 / \ 4 5 ``` 对应的代码如下: ```python nodes = [1, 2, 3, 4, 5] root = create_binary_tree(nodes) leaf_count = count_leaves(root) print("叶子节点数: ", leaf_count) ``` 输出结果为: ``` 叶子节点数: 3 ``` 所以,对于上述二叉树,叶子节点数为3。

相关推荐

最新推荐

recommend-type

C++使用递归和非递归算法实现的二叉树叶子节点个数计算方法

主要介绍了C++使用递归和非递归算法实现的二叉树叶子节点个数计算方法,涉及C++二叉树的定义、遍历、统计相关操作技巧,需要的朋友可以参考下
recommend-type

C++实现二叉树基本操作详解

主要为大家详细介绍了C++实现二叉树基本操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

C语言判定一棵二叉树是否为二叉搜索树的方法分析

主要介绍了C语言判定一棵二叉树是否为二叉搜索树的方法,结合实例形式综合对比分析了C语言针对二叉搜索树判定的原理、算法、效率及相关实现技巧,需要的朋友可以参考下
recommend-type

c++二叉树的建立与打印

在计算机科学中,二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(left subtree)和“右子树”...对任何一棵二叉树T,如果其终端结点数(即叶子结点数)为 ,深度为2的结点数为 ,则 = + 1。
recommend-type

智慧物流医药物流落地解决方案qytp.pptx

智慧物流医药物流落地解决方案qytp.pptx
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

解释minorization-maximization (MM) algorithm,并给出matlab代码编写的例子

Minorization-maximization (MM) algorithm是一种常用的优化算法,用于求解非凸问题或含有约束的优化问题。该算法的基本思想是通过构造一个凸下界函数来逼近原问题,然后通过求解凸下界函数的最优解来逼近原问题的最优解。具体步骤如下: 1. 初始化参数 $\theta_0$,设 $k=0$; 2. 构造一个凸下界函数 $Q(\theta|\theta_k)$,使其满足 $Q(\theta_k|\theta_k)=f(\theta_k)$; 3. 求解 $Q(\theta|\theta_k)$ 的最优值 $\theta_{k+1}=\arg\min_\theta Q(
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。