This method finds the largest node in a BST returns its value and deletes it. I am getting an access violation at prev->rightLink = cur->leftLink;. I am relatively unfamiliar with C++ and not able to find the cause.
int CTree::popLargest(TreeNode* tr)
{
int largest;
TreeNode* prev = NULL;
TreeNode* cur = tr;
while (cur->rightLink != NULL)
{
prev = cur;
cur = cur->rightLink;
largest = cur->info;
//DeleteAttemptTwo(tr, largest);//DeleteItem(largest);
}
if (cur->leftLink != NULL)
{
prev->rightLink = cur->leftLink;
}
else
{
prev->rightLink = NULL;
}
return largest;
}
This if and else makes little sense –
What you are trying to do can be done just by –
prev->rightLink = cur->leftLink;And the reason you are getting access violation on this statement is that
previs not pointing to a valid node, which is when it isNULL(as initialized).