计算二进制树叶在深度

时间:2014-03-29 17:07:10

标签: algorithm recursion tree binary-tree

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

意思是我有一个函数leafcount(BTNode节点,int级别)

对于像下面这样的树结构的函数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--);
}

虽然它不起作用。我做错了什么?

1 个答案:

答案 0 :(得分:1)

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