二进制搜索树忘记我添加的每个节点
Binary Search Tree Forgetting Every Node I Add
我的问题看起来很简单,但我找不到解决方案。我有一个二叉树,这是我的加法函数:
void collection::addToTree(vendor *& item)
{
Node * curr = root;
while (curr)
{
if (strcmp(item->getName(), root->item->getName()) < 0)
curr = curr->left;
else
curr = curr->right;
}
curr = new Node(item);
}
这是我的Node
构造函数:
collection::Node::Node(vendor *& item) : left(nullptr), right(nullptr)
{
this->item = item;
}
然而,无论我试图向树中添加什么或多少项,树总是空的。我能想到的唯一一段能帮助你们的代码是我的树的struct
:
struct Node
{
Node();
Node(vendor *& item);
vendor * item;
Node *left, *right;
};
Node * root;
vendor
的所有子变量都有值(正如我在调试器中看到的)。我希望我能给你们更多的细节,但这是我所知道的关于错误的全部。非常感谢您的反馈。
在add
函数中,您只使curr
指向新项,但这不会更改回以前的左/右指针,这可能就是您的目标。
您需要直接修改左/右指针,如下所示:
void collection::addToTree(vendor *& item)
{
Node * curr = root;
while (curr)
{
if (strcmp(item->getName(), curr->item->getName()) < 0)
{
if (!curr->left)
{
curr->left = new Node(item);
return;
}
curr = curr->left;
}
else
{
if (!curr->right)
{
curr->right = new Node(item);
return;
}
curr = curr->right;
}
}
root = new Node(item);
}
此外,请确保执行Node * root = nullptr
,因为不初始化它可能会导致它包含任何任意值。
注意,我还将if (strcmp(item->getName(), root->item->getName()) < 0)
更改为if (strcmp(item->getName(), curr->item->getName()) < 0)
,因为分支依赖于curr
,而不是root
。
我认为这里的问题是,您的curr
变量应该声明为Node **curr
,并接收根的地址,以便在addToTree
函数之外可见更改。
void collection::addToTree(vendor *& item)
{
Node ** curr = &root;
while (*curr)
{
if (strcmp(item->getName(), (*curr)->item->getName()) < 0)
(*curr) = (*curr)->left;
else
(*curr) = (*curr)->right;
}
*curr = new Node(item);
}
相关文章:
- 将树节点添加到向量向量中的 n 元树遍历的平均和最坏情况时间复杂度是多少?
- 如何将节点添加到链表
- 在 C++ 中使用 temp 变量将节点添加到链表的末尾
- 将节点添加到链接列表中,而无需明确分配内存空间(无需使用新)
- 推送功能(将新节点添加到列表顶部)C
- 倒排索引节点添加字
- 制作完成后是否可以将节点添加到图形中
- 嗨,我正在尝试将集合的特定节点添加到列表中,该列表位于哈希表中
- C++链表将新节点添加到列表的开头
- 如何将节点添加到链表C++的前面?我想多了这个概念
- 用独特的指针将节点添加到树上
- 将节点添加到链表的末尾
- 将新节点添加到列表中并动态命名
- C++:尝试将新节点添加到链表会产生"线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x0)"错误
- 在c++中按字母顺序将节点添加到链表中
- 将边缘节点添加到没有边缘的顶点时出现 Seg 错误
- 当我尝试将新节点添加到列表中时,我收到错误消息"no matching function call"
- 如何在C++中将文件路径作为节点添加到树或堆栈中
- 将多个节点添加到树C++中
- C++将节点添加到链表的开头一次后失败.其他方法也有问题