【发布时间】:2020-04-09 13:16:05
【问题描述】:
我正在处理 BST 任务,并且我已经完成了所有的实现;但是,当我调用bool insert(int i) 函数时,会出现segmentation fault(core dumped)。你能找到我应该改变什么来摆脱这个错误吗?
const treenode* find( const treenode* n, int i ){
if(n->val==i)
return n;
else if(n->val<i)
return find(n->right, i); //if our key is less than given node it goes to the left node through recursion function
else if(n->val>i)
return find(n->left, i); //the same thing here, if it is bigger - it goes right through recursion
else
return n;
}
treenode** find( treenode** n, int i ){
if((*n)->val==i)
return n;
else if((*n)->val<=i)
return find(&((*n)->right), i);
else if((*n)->val>=i)
return find(&((*n)->left), i);
else
return n;
}const treenode* find( const treenode* n, int i ){
if(n== nullptr)
return n;
else if(n->val==i)
return n;
else if(n->val>i)
return find(n->left, i); //if our key is less than given node it goes to the left node through recursion function
else if(n->val<i)
return find(n->right, i); //the same thing here, if it is bigger - it goes right through recursion
}
treenode** find( treenode** n, int i ){
if((*n)->val==i)
return n;
else if((*n)->val<=i)
return find(&((*n)->right), i);
else if((*n)->val>=i)
return find(&((*n)->left), i);
else
return n;
}
bool set::insert( int i ) {
treenode** res=find(&tr, i);
if(*res==nullptr) {
*res = new treenode(i);
return true;
}
return false;
}
【问题讨论】:
-
@Swampy 目前还不清楚你有多少功能。:)
-
另外,
find似乎没有修改n参数,那么为什么**? -
在使用前不检查任何地方的 nullptr
-
@VladfromMoscow 我得到了两个查找功能,一个用于查找,一个用于插入和删除
-
@XSwampy 你永远只需要一个,即
treenode* find(treenode* n, int);。这将涵盖所有情况,因为您永远不会在任何这些函数内的任何地方修改pointer-to-treenode实例。此外,这些函数只是为了使代码更长更难阅读,因为它们在技术上自然是相同的。
标签: c++ segmentation-fault binary-search-tree