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)
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,并right以NULL(nullptr在C++ 11):
typedef struct tree
{
string data;
tree *left;
tree *right;
tree():left(NULL),right(NULL){}
} TREE;
Run Code Online (Sandbox Code Playgroud)