答案 0 :(得分:2)
在 else if
情况下,您正在计数当前节点左右两边的子树,从而计算了整个树。尝试在不同情况下拆分两个递归函数调用。
我的第一个答案无效。这个新的。
第一个问题是您实际上并没有计算任何东西,您只是递归地遍历每个节点并检查其值。
第二,该检查也无法按预期进行。您必须检查当前节点是否应该计数。您还应该在树的下方继续计算,因为这些节点可能比键小。
我的工作实现:
public int BSTsmallcount(BinNode root, int key)
{
int count = 0;
if (root == null) {
return 0;
}
else if (root.value() < key) {
count++;
count += BSTsmallcount(root.left(), key);
count += BSTsmallcount(root.right(), key);
}
else {
count += BSTsmallcount(root.left(), key);
}
return count;
}