gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 15:03:01 25 4
gpt4 key购买 nike

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

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;
}

如您所见,我想在插入中初始化一个 TREE 结构,当我完成此操作后,我想将它与树的左节点或右节点链接起来。

但是当我 gdb 这个时,只能构建 1 级树(顶层),*left*right 节点是 NULL 无论我尝试向其中添加多少个字符串。为什么?

我的树是:

typedef struct tree
{
string data;
tree *left;
tree *right;
} TREE;

最佳答案

bool TreeSet::insert(TREE *node

应该是

bool TreeSet::insert(TREE *&node

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


旁注,当构建树时,您可能应该将 leftright 初始化为 NULL (nullptr 在 C++11 中):

typedef struct tree
{
string data;
tree *left;
tree *right;
tree():left(NULL),right(NULL){}
} TREE;

关于C++:我的新节点在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26166023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com