【问题标题】:counting binary tree leaves at depth在深度计算二叉树的叶子
【发布时间】:2014-03-29 17:07:10
【问题描述】:

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

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

对如下所示的树结构调用此函数leafCount(root,2) 应产生1,即它从根计算第2 层的叶节点B。它忽略了其他叶子 C,因为它不在级别 2 而是级别 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--。最好有一个级别——在递归调用之前,只需将级别发送到递归调用。

标签: algorithm recursion tree binary-tree


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-19
    • 2022-01-25
    • 2010-12-24
    • 2016-01-17
    • 2017-04-28
    • 2010-12-15
    • 2010-12-24
    • 1970-01-01
    相关资源
    最近更新 更多