Can someone tell me what am i doing wrong for this deleteFrom funciton. My task
ID: 3867239 • Letter: C
Question
Can someone tell me what am i doing wrong for this deleteFrom funciton. My task was to implement this and use in the delete function. This funciton should Deletes the node with the value specified in the below function.
Also how do i combine the findminvalue into deleteFrom function. I have implement the findminvalue function below.
void Tree::deleteFrom(TreeNode* startintPoint, int value){
if(NULL == startintPoint){
return;
}
else {
if(value < startintPoint->value){
parentNode = startintPoint;
leftOrRight = 0;
deleteFrom(startintPoint->left, value);
}
else if(value > startintPoint->value){
parentNode = startintPoint;
leftOrRight = 1;
deleteFrom(startintPoint->right, value);
}
else{
if(startintPoint->left == NULL && startintPoint->right != NULL){
TreeNode* temp1 = startintPoint;
parentNode->right = startintPoint->right;
delete temp1;
temp1 = NULL;
}
else if(startintPoint->right == NULL && startintPoint->left != NULL){
TreeNode* temp1 = startintPoint;
parentNode->left = startintPoint->right;
delete temp1;
temp1 = NULL;
}
else if(startintPoint->left != NULL && startintPoint->right != NULL){
TreeNode* temp3 = startintPoint->left;
while(temp3->right != NULL){
temp3 = temp3->right;
}
startintPoint->value = temp3->value;
deleteFrom(startintPoint->left, temp3->value);
}
else {
if(leftOrRight == 0){
parentNode->left = NULL;
}
if(leftOrRight == 1){
parentNode->right = NULL;
}
}
}
}
TreeNode* Tree::findMinValue(TreeNode* startingPoint)
{
TreeNode* current = startingPoint;
while (current->left != NULL)
{
current = current->left;
}
return current;
Explanation / Answer
void Tree::deleteFrom(TreeNode* startintPoint, int value, TreeNode** minValue)
{
//from example in class, deleting a node
if (startintPoint == nullptr)
{
return;
}
else if (startintPoint->left != nullptr && value < startintPoint->value)
{
deleteFrom(startintPoint->left, value);
}
else if (startintPoint->right != nullptr && value > startintPoint->value)
{
deleteFrom(startintPoint->right, value);
}
else
{
if (startintPoint->left == nullptr && startintPoint->right == nullptr)
{
delete startintPoint;
startintPoint = nullptr;
}
else if (startintPoint->left == nullptr)
{
TreeNode* temp = startintPoint;
startintPoint = startintPoint->right;
delete temp;
}
else if (startintPoint->right == nullptr)
{
TreeNode* temp = startintPoint;
startintPoint = startintPoint->left;
delete temp;
}
else
{
TreeNode* temp = current(startintPoint->right);
startintPoint->value = temp->value;
deleteFrom(startintPoint->right, temp->value);
}
//After deleting a value, updating findMinValue
TreeNode* temp = startintPoint;
while (temp->left != NULL)
{
temp = temp->left;
}
*minValue = temp; //update min value to the minvalue
}
}
Before calling this function:
Declaration => TreeNode* minValue = nullptr;
Function call => deleteFrom(root, 10, &minValue); //You should call the function by sending the address of minValue
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.