C ++中的递归函数崩溃

时间:2013-12-27 16:08:18

标签: c++ pointers recursion binary-tree

尝试调用一个简单的程序来测试我的方法,找到第一个比作为参数给出的节点更小的节点:

BinaryTreeMap <int, int> m;
m[5] = 5;
m[3] = 3;
m[8] = 8;
m[1] = 1;
m[2] = 2;
m[6] = 6;
cout << m.firstSmaller(5) << " ";
cout<< m.firstSmaller(6);
cout << " " << m.firstSmaller(3) << " ";
cout << m.firstSmaller(12);

...我的程序崩溃了,没有错误,什么都没有。我正在通过不正确退出递归函数来制作某种无限循环。但我不知道在哪里,因为当我尝试用一​​张纸上的方法时,我得到了正确的结果。

以下是方法:

template <typename TipKey,typename TipValue>
TypeValue BinaryTreeMap<TipKey,TipValue>::firstSmaller(TypeKey key)
{
BSNode *pom = functionforFirstSmaller(root, key);
if(pom == 0) throw "There is no key smaller than the given one!";
return pom->value;
}

并且functionforFirstSmaller:

BSNode* functionforFirstSmaller(BSNode *c, TypeKey k)
{
    if(c->left == 0 && c->right == 0) return c;
    if(c == 0) return 0;
    if(c->key >= k) return functionforFirstSmaller(c->left, k);
    BSNode *cvor = functionforFirstSmaller(c->right, k);
    //if(cvor == 0) return 0;
    return cvor;
}

我不明白为什么会崩溃。如果你们可以帮助我理解,我会非常感激,因为它可以帮助我进一步编程。 对不起,如果不好解释,习惯用C ++(不是我的母语)的英语词汇表。

1 个答案:

答案 0 :(得分:0)

您似乎已经反转了两行代码。尝试:

BSNode* functionforFirstSmaller(BSNode *c, TypeKey k)
{
    if (c == 0) return 0;
    if (c->left == 0 && c->right == 0) return c;
    if (c->key >= k) return functionforFirstSmaller(c->left, k);
    BSNode *cvor = functionforFirstSmaller(c->right, k);
    return cvor;
}