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

使用vector作为输入实现BST类时根节点始终为NULL问题求助

问题定位与修复方案

核心问题:指针值传递导致root赋值不生效

insert函数的第一个参数Node* r是值传递的指针,函数内部修改的只是指针的本地副本,不会修改BST类的成员变量root本身。第一次插入节点时仅修改了本地指针r的指向,类成员root始终保持初始的NULL值,这是你遇到的根因。

其他隐藏问题

  • 内存泄漏:进入insert函数就直接新建节点,若本次插入需要递归到子节点,当前函数内新建的节点会被丢弃,没有释放也没有被挂载到树上。
  • 逻辑冗余:空节点赋值后没有直接返回,后续会执行无意义的数值比较逻辑。

修复代码

仅需调整insert函数的参数为指针引用,同时调整节点新建的时机即可:

// 修改后的insert函数
void insert(Node* &r, int data) {
    // 只有找到空插入位置时才新建节点
    if (r == NULL) {
        r = new Node(data);
        return;
    }
    if (data < r->data) {
        insert(r->left, data);
    } else if (data > r->data) {
        insert(r->right, data);
    }
    // 值相等的情况直接跳过,无需重复插入
    return;
}

修复后运行代码即可正常得到BST的中序遍历结果,你可以根据需求调整print_t函数中空节点的打印逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 07:24:03