c++ - bst 分段故障搜索
问题描述
我正在做 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;
}
解决方案
这个功能
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;
}c
*n
当指针等于nullptr
二叉搜索树为空时,可以调用未定义的行为。
该功能可以如下所示
treenode ** find( treenode **n, int i )
{
if ( *n == nullptr )
{
return n;
}
else if ( i < ( *n )->val )
{
return find( &( *n )->left, i );
}
else if ( ( *n )->val < i )
{
return find( &( *n )->right, i );
}
else
{
return n;
}
}
另一个函数 find 应该是一个常量成员函数,看起来像
const treenode * find( treenode *n, int i ) const
{
if ( n == nullptr )
{
return n;
}
else if( i < n->val )
{
return find( n->left, i );
}
else if( n->val < i )
{
return find( n->right, i );
}
else
{
return n;
}
}
我想这个语句中使用的构造函数
*res = new treenode(i);
将数据成员设置left
为.right
nullptr
推荐阅读
- dart - 使用 SVG 作为容器的背景图像
- android - 如何在 Android 上调用 Clojure?
- sql-server - 部署后如何保护 SSIS 包的敏感数据?
- ngrx - 从 NGRX 中的另一个 reducer 访问 reducer 状态
- twilio - 如何配置 Twilio 号码的 SMS URL?
- php - cURL response different from when opened in a browser
- php - How to validate request json in Lumen
- apollo - Apollo Server - 关于缓存/数据源选项的困惑
- php - Laravel Voyager 管理面板显示损坏的链接文本
- c# - Access a button from the form in other class in C#