我的二叉树结构
struct BST::Node
{
Key key;
Item item;
Node* leftChild;
Node* rightChild;
Node(Key k, Item i)
{
key = k;
item = i;
leftChild = nullptr;
rightChild = nullptr;
}
};
我正在尝试插入树中但是我收到一个错误,说明如果有一个处理程序可以安全地继续该程序。我认为我使用指针的方式可能有问题,但我不能100%确定它是什么,任何帮助都会受到赞赏,谢谢。这是我的insert方法,必须使用递归
void BST::insert(Key k, Item i)
{
insertRec(k, i, root);
}
void BST::insertRec(Key k, Item i, Node* n)
{
if (n == NULL)
{
n->item = i;
n->key = k;
}
else if (k < n->key)
{
insertRec(k, i, n->leftChild);
}
else if (k > n->key)
{
insertRec(k, i, n->rightChild);
}
}
Node * root是一个nullptr。
答案 0 :(得分:0)
仔细查看代码中的以下代码段:
void BST::insertRec(Key k, Item i, Node* n)
{
if (n == NULL)
{
n->item = i;
n->key = k;
}
您在n->item = i
时设置n == NULL
。这是错的! NULL指针不指向有效对象。
相反,您应该只分配一个新节点:
if (n == NULL)
{
n = new Node(k, i);
}
但请记住,当您从树中删除节点时,在返回值后,您应始终delete
它。
此外,您应该在构建BST类时使用相同的方法分配root
,并在销毁期间delete
分配。{/ p>
答案 1 :(得分:0)
您需要注意的事项很少: 1)里面
if (n == NULL)
{
n->item = i;
n->key = k;
}
在分配项目和键值之前,上面的块,您需要为节点分配内存。
n =新节点(i,k);
2)现在,即使遵循上面提到的第一点,创建的新节点也不会被分配给BST的根(如果树为空),因为根通过值传递。因此要么将root作为引用传递,要么作为指针指向。根据您通过引用或指针指向传递的决定更改新节点创建部分。