c++ - bst分割故障搜索

标签 c++ segmentation-fault binary-search-tree

我正在进行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(即二进制搜索树为空)时,可以调用 undefined 的行为。

该函数可以如下所示
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;
    }
}

而另一个函数发现应该是常量成员的函数看起来像
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);

将数据成员leftright设置为nullptr

关于c++ - bst分割故障搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61122052/

相关文章:

c++ - 从 SURF 描述符转换为关键点

c++ - 绘制 Sprite 导致 Segmentation Fault

java - 在二叉搜索树中查找 K 个最大元素

algorithm - 在不使用父指针的情况下找到后继者

java - 我需要一个数据结构来保存两种数据类型

c++ - 从多选 ListView ctrl 中获取选定的成员

c++ - 未找到 'vtkPolyDataMapper' 的覆盖

java - 用于解决冲突的分组算法

c - fscanf 段错误 - C

c - 某些 strtok 调用出现段错误