// Remove a node from tree
void BST::remove(Entry *node) {
    if(node->left != NULL && node->right != NULL) {
        removeTwo(node, 0);
    } else {
        removeOne(node);
    }
}
Esempio n. 2
0
int removeTwo(node*& head)
{
	node* curr = head;
	node* prev = NULL;

	if(curr == NULL)
	{
		return 0;
	}
	else if(curr->data == 2)
	{
		if(curr == head)
		{
			node* currPtr = head;
			head = head->next;
			delete currPtr;
		//	currPtr = head;
			return 1 + removeTwo(head);
		}
		else if(curr->next == NULL)
		{
			delete curr;
			curr = NULL;
			prev->next = NULL;
			return 1;
		}
		else
		{
			prev->next = curr->next;
			delete curr;
			curr = prev->next;
			return 1 + removeTwo(curr);
		}
	}
	else
	{
		return removeTwo(head->next);
	}
}
Esempio n. 3
0
int removeTwo(node*& head)
{
	if(head == NULL)
	{
		return 0;
	}
	
	if(head->data == 2)
	{
		node* temp = head;
		if(head->next != NULL)
		{
			head = head->next;//if there is a next, advance to it
			if(temp->previous != NULL)//if there is a previous, skip over temp (aka delete)
			{
				head->previous = temp->previous;
			}
			else
			{
				head->previous = NULL;
			}
		}
		else// there is only the head remaining
		{
			delete head; 
			head = NULL;
			return 1; // end of list
		}
		delete temp;
		return 1 + removeTwo(head);
	}
	else
	{
		return removeTwo(head->next);
	}
}