我正在尝试创建一个函数来计算从根节点到指定级别的树的叶子。
意思是我有一个函数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--);
}
虽然它不起作用。我做错了什么?
答案 0 :(得分:1)
您正在使用post-decrement运算符来放置level--。所以level--发生在函数调用之后而不是之前。如果你改为pre-decrement --level,你也会减少两次。只需将level--作为一行代码放在递归函数调用之上一次,然后将级别传递给函数调用。此外,如果level == 0,则可以返回0或1,而无需浏览节点下方树的其余部分。如果您的树比想要找到的叶子要深得多,那么这将加快搜索速度。