使用解除引用的c ++二叉搜索树

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用解除引用的c ++二叉搜索树相关的知识,希望对你有一定的参考价值。

您好我尝试使用deference将节点插入二叉搜索树。但我想我现在卡在插入功能中了。我想在调用插入函数时我犯了一些错误。所以任何人都可以帮我告诉我代码有什么问题,谢谢。

struct BstNode {
    int data;
    BstNode *left;
    BstNode *right;
};


BstNode *GetNewNode(int);

void Insert(BstNode **, int);

void Insert(BstNode **root, int data)
{
    if(*root == NULL){
        *root = GetNewNode(data);
    }
    else if(data <= root){
        Insert(*(root -> left), data);
    }
    else {
        Insert(*(root -> right), data);
}

BstNode *GetNewNode(int data)  
{
    BstNode *newNode = new BstNode(); 
    newNode->data = data; 
    newNode->left = newNode->right = NULL;
    return newNode;
}

int main ()
{
    BstNode *root = NULL; 

    Insert(&root,15);
    Insert(&root,10);
    Insert(&root,20);

    return 0;
}
答案

你的意思是以下

void Insert( BstNode **root, int data )
{
    if ( not *root ) 
    {
        *root = GetNewNode( data );
    }
    else if ( data < ( *root )->data ) 
    {
        Insert( &( *root )->left, data );
    }
    else 
    {
        Insert( &( *root )->right, data );
    }
}

将此函数中的条件语法与函数实现中的条件语法进行比较,一切都将清楚。

例如,此if语句至少有两个错误

else if(data <= root){
        ^^^^^^^^^^^^  
        Insert(*(root -> left), data);
               ^^^^^^^^^^^^^^^

并且编译器将发出相应的诊断消息。

以上是关于使用解除引用的c ++二叉搜索树的主要内容,如果未能解决你的问题,请参考以下文章

用于在C中为二叉搜索树分配内存的分段错误

C++-二叉搜索树的查找&插入&删除-二叉搜索树代码实现-二叉搜索树性能分析及解决方案

展开树中值的范围函数?

C++map和set

C++map和set

二叉搜索树的插入与删除(C语言)