我正在学习C ++,写一个二叉搜索树。 下面是我写的我的插入方法的代码。
BSTNode * BST::Insert(const std::string & v) {
BSTNode *n = !root ? root = new BSTNode(v) : Insert_Helper(v,root);
if(n) size++;
return n;
}
BSTNode * BST::Insert_Helper(const std::string & v, BSTNode *n) {
if(!n->value.compare(v))
return NULL; // already have v
else if(n->value.compare(v) > 0) // v goes to the left
if(n->left) return Insert_Helper(v,n->left);
else return n->left = new BSTNode(v);
else // v goes to the right
if(n->right) Insert_Helper(v,n->right);
else return n->right = new BSTNode(v);
}
我得到的错误是这样的:这一切工作正常,花花公子,直到我尝试插入重复的节点。 它不添加一个新的节点,但是它增加计数。
通过观察GDB,我发现,当我尝试补充一点,我已经有一个字符串, Insert_Helper
正常工作,并返回NULL。 然而,这值(我的机器上)是一样的东西为0x6,这是出于当然界,但不为0x0像我想的那样。 我认为这会导致一个问题,在那里我有,如果(n)的语句点。 在这种情况下,n的值为true,因此增加一个规模超过它应该。
此外,在我的程序这一点,节点继续得到正确添加,但我的插入函数继续返回为0x6的地址,即使他们真的是在内存,我可以访问有效的位置。
谁能给我任何指标,让我可能是做错了什么?