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

二叉搜索树插入节点失败:根节点始终为nullptr的解决方法

问题分析与解决

原代码

节点结构体

struct node {
    int data{};
    node *right{nullptr};
    node *left{nullptr};
};

二叉树类定义

class BTree {
private:
    node *root;
    void insert(node *sr, int num);

public:
    BTree();
    void buildTree(int num);
};

insert 方法实现

void BTree::insert(node *sr, int num) {
    if (sr == nullptr) {
        sr = new node;
        sr->data = num;
    } else {
        if (num < sr->data)
            insert(sr->left, num);
        else
            insert(sr->right, num);
    }
}

main 函数

int main() {
    BTree tree;
    tree.buildTree(3);
    return 0;
}

问题根源

你写的 insert 函数用了传值方式传递指针,这意味着函数里的 sr 只是原指针的一个副本。当你在 sr == nullptr 时给 sr 分配新节点,修改的仅仅是这个副本,原指针(比如类里的 root,或者父节点的 left/right)根本不会被更新。

比如第一次调用 insert(root, 3) 时,root 原本是 nullptr,函数里的 sr 副本被赋值为新节点,但 root 本身还是保持 nullptr,自然看不到节点被添加。

修复方案

有两种简单有效的修复方式:

方式一:传递指针的引用

把 insert 函数的参数改成指针的引用,这样修改 sr 就会直接作用于原指针:

// 类内声明修改
void insert(node* &sr, int num);

// 方法实现修改
void BTree::insert(node* &sr, int num) {
    if (sr == nullptr) {
        sr = new node;
        sr->data = num;
    } else {
        if (num < sr->data)
            insert(sr->left, num);
        else
            insert(sr->right, num);
    }
}

同时别忘了补充类的构造函数和 buildTree 的实现(否则编译会报错):

BTree::BTree() : root(nullptr) {}

void BTree::buildTree(int num) {
    insert(root, num);
}

方式二:让 insert 返回节点指针

让 insert 函数返回新的节点指针,在调用处手动更新原指针:

// 类内声明修改
node* insert(node *sr, int num);

// 方法实现修改
node* BTree::insert(node *sr, int num) {
    if (sr == nullptr) {
        sr = new node;
        sr->data = num;
        return sr;
    } else {
        if (num < sr->data)
            sr->left = insert(sr->left, num);
        else
            sr->right = insert(sr->right, num);
        return sr;
    }
}

// buildTree 实现
void BTree::buildTree(int num) {
    root = insert(root, num);
}

// 构造函数
BTree::BTree() : root(nullptr) {}

两种方式都能解决问题,第一种传递指针引用的写法更简洁直观,推荐优先使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:45:31