C++:我的新节点在哪里?

hlx*_*007 0 c++ binary-tree set

我试图使用二叉树在集合中添加元素:

bool TreeSet::add(const string &str)
{
    if (treesize == 0)
    {
        TreeNode->data = str;
        treesize++;
        return true;
    }
    else
    {
        if (str < TreeNode->data)
            return insert(TreeNode->left, str);
        else if (str > TreeNode->data)
            return insert(TreeNode->right, str);
        else
            return false;
    }
    return false;
}

bool TreeSet::insert(TREE *node, const string &str) //private
{
    if (node == NULL)
    {
        node = new TREE;
        node->data=str;
        node->left = NULL;
        node->right = NULL;
        treesize++;
        return true;
    }
    else
    {
        if (str < node->data)
            return insert(node->left, str);
        else if (str > node->data)
            return insert(node->right, str);
        else
            return false;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我想初始化插入内部的TREE结构,当我完成此操作时,我想将它与树的左或右节点链接.

但是当我gdb这个时,只能构造1级树(顶级),*left*right节点就是NULL我试图添加多少个字符串.为什么?

我的树是:

typedef struct tree
{
    string data;
    tree *left;
    tree *right;
} TREE;
Run Code Online (Sandbox Code Playgroud)

And*_*dyG 6

bool TreeSet::insert(TREE *node
Run Code Online (Sandbox Code Playgroud)

应该

bool TreeSet::insert(TREE *&node
Run Code Online (Sandbox Code Playgroud)

指针也可以通过引用传递,如果您打算直接修改它们应该是.否则你通过副本,你现在有两个指针指向同一位置.当您使用复制的一个new数据时,它现在指向一个新的内存位置,使您的原始指针仍为NULL(nullptr在C++ 11中)


在一个侧面说明,当树被构建,你应该初始化left,并rightNULL(nullptr在C++ 11):

typedef struct tree
{
    string data;
    tree *left;
    tree *right;
    tree():left(NULL),right(NULL){}
} TREE;
Run Code Online (Sandbox Code Playgroud)