[英]C++ Binary Search Tree error with deleting nodes
I'm working with deleting nodes from a binary search tree and I keep getting a segfault error after the while loop in this function. 我正在从二进制搜索树中删除节点,并且在此函数的while循环之后,我不断收到segfault错误。 Please help me catch any errors if you can. 如果可以的话,请帮助我发现任何错误。
Here is the function: 这是函数:
void deleteNode()
{
int key;
nodePtr location = NULL, parent = NULL;
cout << "Enter account number to delete: ";
cin >> key;
cout << endl << endl;
bool found = searchTree(key, &location, &parent);
if (!found)
{
cout << "Error! Account number: " << key << " was not found."
<< endl << endl;
}
else if (location->left != NULL && location->right != NULL)
{ //delete node with left and right subtrees
nodePtr leftmost = location->right, leftmostParent = NULL;
while (leftmost->left != NULL)
{
leftmostParent = leftmost;
leftmost = leftmost->left;
}
leftmost->left = location->left;
if (location->right != leftmost)
leftmost->right = location->right; cout << "1" << endl;
if (parent != NULL)
{
if (parent->acctNum > location->acctNum)
parent->left = leftmost;
else
parent->right = leftmost;
}
leftmostParent->left = NULL;
delete location;
location = NULL;
}
else if (location->left != NULL && location->right == NULL)
{ //delete node with only a left subtree
if (parent->acctNum > location->acctNum)
parent->left = location->left;
else
parent->right = location->left;
delete location;
location = NULL;
}
else if (location->left == NULL && location->right != NULL)
{ //delete node with only a right subtree
nodePtr leftmost = location->right, leftmostParent = NULL;
while (leftmost->left != NULL)
{
leftmostParent = leftmost;
leftmost = leftmost->left;
}
leftmost->right = location->right;
leftmostParent->left = NULL;
if (parent->acctNum > location->acctNum)
parent->left = leftmost;
else
parent->right = leftmost;
delete location;
location = NULL;
}
else
{ //delete a leaf node
if (location->acctNum > parent->acctNum)
parent->right = NULL;
else
parent->left = NULL;
delete location;
location = NULL;
}
}
I see one problem here 我在这里看到一个问题
nodePtr leftmost = location->right, leftmostParent = NULL;
while (leftmost->left != NULL)
{
leftmostParent = leftmost;
leftmost = leftmost->left;
}
...
leftmostParent->left = NULL;
if location->right is a leaf, then leftmostParent is never set and still pointing to NULL; 如果location-> right是叶子,则永远不会设置leftmostParent并仍然指向NULL; so will segfault. segfault也是如此。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.