Witam!
Mam takie zadanie:

Mamy drzewo wskazane przez 'Root'. Napisz funkcje 'Delete'(której argumentem będzie wskaznik do węzła 'p' majacego lewe i prawe poddrzewo).Funkcja ta ma usunąć następnik węzła 'p' jesli klucz w węźle 'p' spełnia warunek 'war', a poprzednika węzła 'p' w przeciwnym wypadku.Zdefiniuj wszystkie struktury zmienne i funkcje.

Mam napisaną funkcję wyszukującą następnik i poprzednik. Znalazłem też na forum funkcje usuwającą węzeł troche ją przerobiłem pod moje zadanie ale nie wiem jak zaimplementować to z tym warunkiem 'war'.

struct node
{
	node *left, *right, *up;
	int val;
}*root = NULL;

node *poprzednik(node *T)
{
    if (!T)
        cout << "BRAK ELEMENTU"<<endl;
    if (T->left)
        return max(T->left);
    node *p = T->parent;
    while ((p) && (T == p->left))
    {
        T = p;
        p = p->parent;
    }
    return p;
}

node *nastepnik(node *T)
{
    if (!T)
        cout << "BRAK ELEMENTU"<<endl;
    if (T->right)
        return min(T->right);
    node* p = T->parent;
    while ((p) && (T = p->right))
    {
        T = p;
        p = p->parent;
    }
    return p;
}

void delete(node*&root, int k) {
	node*usuwacz = nastepnik(w);
	if (usuwacz)
	{
		if ((usuwacz->left) && (usuwacz->right))
		{
			node*pre = poprzednik(usuwacz); 
			usuwacz->val = pre->val;
			if (pre->up->left == pre) 
				pre->up->left = pre->left; 
			else
				pre->up->right = pre->left;
			delete pre;
		}
		else 
		{
			node* poddrzewo = usuwacz->left ? usuwacz->left : usuwacz->right;

			if (usuwacz->up) 
			{
				if (usuwacz->up->left == usuwacz) 
					usuwacz->up->left = poddrzewo; 
				else
					usuwacz->up->right = poddrzewo;

				if (poddrzewo) 
					poddrzewo->up = usuwacz->up;
			}
			else 
			{
				poddrzewo->up = NULL;
				root = poddrzewo;
			}
			delete usuwacz;
		}
	}
	}