2014-03-29 37 views
1

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

意思我有一个功能leafcount(BTNode节点,INT水平)

甲调用此函数leafCount(根,2)的树结构如下面应产生1即,它计算在水平叶节点乙2根。它忽略了其他叶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--); 
} 

虽然它不起作用以下。我究竟做错了什么?

+0

你有两个调用level--。最好有一个级别 - 在递归调用之前,发送级别到递归调用。 – Tushar

+0

非常感谢你! – user3476229

回答

1

您正在使用post-decrement操作符。所以水平 - 发生在函数调用之后而不是之前。如果你改变预先减量级别,你也会减少两次。只需将level--作为递归函数调用一次以上的代码行,然后将函数调用传递给level。另外,如果级别== 0,则可以返回0或1而不探索节点下方树的其余部分。如果你的树远远超过你想要找到的目标等级,这将加快搜索的速度。

+0

非常感谢! – user3476229