【发布时间】:2018-06-11 23:35:36
【问题描述】:
我正在编写一个函数来查找 BST 中奇数/偶数/负数的数量。你传入一个树和一个指向函数的指针。
int countIf (treelink tree, int (*pred)(TreeItem)) {
if ( tree == NULL ) return 0;
return (*pred)(tree->item) + countIf(tree->left,pred) + countIf(tree->right,pred);
}
函数指针 pred 可以是这样的:
int isEven (TreeItem n) {
return !(n%2);
}
int isOdd (TreeItem n) {
return n%2;
}
int isNegative (TreeItem n) {
return (n < 0);
}
为什么 countIF 的代码不起作用?它只适用于某些情况,而不是全部。 谢谢
它正在使用这组数字:7 5 11 3 6 9 15 1 4 8 10 14 16 但不是这样:7 -5 11 -9 3 10 15 1 4 8 14 16 6
【问题讨论】:
-
如果
n为负数,n % 2的返回值是多少?!另外:pred(tree->item)。 function call operator is defined only on pointers-to-function。函数衰减为指向函数的指针。 -
也对没有产生正确的minimal reproducible example 表示反对,包括:提出一个失败的案例。
-
谢谢,我的问题在于 isOdd 和 isEven 函数,而不是 countIf 函数。我在这里有点新,所以下次将包括示例
-
@AnttiHaapala 好点,
isOdd将返回-1用于负奇数。使用!!(n%2)可以解决它,甚至只是n&1。 -
@Billi 它仍然不是最小的。你应该做的是找出最小的测试用例。并产生一个最小的可运行程序。最后你会发现
isOdd有时会返回-1并且会问这个问题。
标签: c recursion binary-search-tree