You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用解引用的C++二叉搜索树Insert函数报错,求代码排查帮助

二叉搜索树Insert函数的错误排查与修复

嗨,我帮你找出了代码里的关键问题,咱们逐个分析并修复:

存在的错误点

  • 比较逻辑错误:在else if(data <= root)这一行,root是BstNode**类型(指向指针的指针),你无法直接将整数data和二级指针做比较。正确的做法是先解引用root得到当前节点的指针*root,再访问它的data成员,也就是(*root)->data。
  • 递归调用参数错误:
    • 原代码里的Insert(*(root->left), data)和Insert(*(root->right), data)完全不符合语法要求:首先root是二级指针,没有left/right成员;其次Insert函数接收的是BstNode**类型参数,你需要传递当前节点左/右子树指针的地址,也就是&((*root)->left)和&((*root)->right)。

修正后的完整代码

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)->data){ // 修正比较逻辑
        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;
}

额外说明

修正后的代码可以正确递归插入节点:每次递归时,我们传递的是当前节点左/右子树指针的地址,这样在递归到空节点时,才能正确修改父节点的子指针,完成节点插入操作。

内容的提问来源于stack exchange,提问作者Shawn W W

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:43:51