我已经完成了一个(ADT)二元shearch树的实现,我必须做一个函数来计算父子的数量,这些父母的儿子差异小于5。该计划有效,只有这个功能失败。
返回' (递归)我有一个断点。
int difference(BSTNode *root, comperFunc cmpFn, comperFunc lesserThenFive)
{
int count = 0;
if (root)
{
count = 0;
if (root->Left && root->Right)
{
//if root->Right > root->Left
if (cmpFn(root->Right->key, root->Left->key) == 1)
{
if (lesserThenFive(root->Right->key, root->Left->key))
count = 1;
}
//if root->Right < root->Left
if (cmpFn(root->Right->key, root->Left->key) == -1)
{
if (lesserThenFive(root->Left->key, root->Right->key))
count = 1;
}
}
}
return difference(root->Left, cmpFn, lesserThenFive) + difference(root- >Right, cmpFn, lesserThenFive) + count;//here is the break point
}
答案 0 :(得分:1)
在return
语句中,如果输入difference
并且root
为空,则将取消引用空指针。
该返回需要在if
块中,并且您需要在else
部分返回一些可变值。
扩大一点。您的算法recursivley使用当前difference
的左右节点调用root
,但最终root->left
或root->right
中的一个将成为NULL
。然后,您的return语句将有效地尝试使用NULL的左侧或右侧成员调用difference
,例如NULL->left
。这将在任何现代操作系统上产生错误。