algorithm - 计算深度的二叉树叶子

标签 algorithm recursion tree binary-tree

我正在尝试创建一个函数来计算从根节点开始指定级别的树的叶子数。

意思是我有一个函数 leafcount(BTNode node, int level)

为如下所示的树结构调用此函数 leafCount(root,2) 应该产生 1,即它从根计算第 2 层的叶节点 B。它忽略其他叶 C,因为它不在 level 2 而在 level 1

        root
       /    \
      A      C 
     /
    B

我尝试使用递归实现以下

int leafCount(BTNode node, int level){

if(node == null){
 return 0;
}
if(level == 0 && (node.left == null && node.right == null)){
 return 1;
}
else{
 return leafCount(node.left,level--) + leafCount(node.right,level--);
}

虽然没用。我做错了什么?

最佳答案

您正在通过放置 level-- 使用后递减运算符。所以 level-- 发生在函数调用之后而不是之前。如果您更改为预递减 --level,您也会将级别递减两次。只需将 level-- 作为一行代码放在递归函数调用之上一次,然后将 level 传递给函数调用。此外,如果 level == 0 您可以返回 0 或 1 而无需探索节点下方树的其余部分。如果您的树比您想要在其上查找叶子的所需级别深得多,这将稍微加快搜索速度。

关于algorithm - 计算深度的二叉树叶子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22734077/

相关文章:

algorithm - 扫描线算法

python - 从 "graph"(数据库)数据递归创建字典

c++ - 阿桑 : heap-use-after-free when flattening a binary tree to a linked list

c# - 功能正则表达式递归节 - 从这个被屠宰的字符串中重建特定的字符串

c - 如何释放包含 char 指针的 BST?

algorithm - 我应该如何在 Haskell 中定义二叉树?

mysql - 使用单个查询在 mysql 表中查找多个 child 的所有 parent

algorithm - 树的每对顶点之间的最大流量之和

algorithm - 基于非文字比较的快速搜索方法

performance - 快速解压算法