尝试调用一个简单的程序来测试我的方法,找到第一个比作为参数给出的节点更小的节点:
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 ++(不是我的母语)的英语词汇表。
答案 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;
}