Witam! Mam za zadanie napisanie drzewa bst oraz dodanie funkcji umożliwiającej sprawdzenie, czy w drzewie BST znajduje się podany (z klawiatury) znak. Jeśli wskazany znak zostanie znaleziony, należy wyświetlić stosowny komunikat i dodatkowo podać numer poziomu, na którym się znajduje (przyjąć, że korzeń znajduje się na poziomie nr 1)(1 funkcja)-prototyp funkcji int find(ETYPE x, TREE T, int l); oraz umożliwienie usunięciea z drzewa BST węzła zawierającego podany (z klawiatury) znak.(2 funkcja). Po usunięciu węzła program powinien wyświetlić drzewo po modyfikacj.Udało mi sie jedynie stworzyc drzewo, stworzyc fukcje usuwajaca dany element,jednak nie dziala ona poprawnie,(kompiluje sie jednak nie usuwa elementu z drzewa. Prosiłbym o pomoc co do 1 funkcji oraz o sprawdzenie gdzie wystepuje błą w drugiej.Serdeczne dzieki.

/* Ten program tworzy i wy?wietla drzewo typu BST */

#include <stdlib.h>
#include <stdio.h>


#define TRUE 1
#define FALSE 0

typedef int BOOLEAN;
typedef char ETYPE;

typedef struct NODE *TREE;
struct NODE {
	ETYPE element;
	TREE left, right;
} *root;

int all = 0; // ilosc elementow, 

/* funkcja print_tree(T,l) drukuje drzewo T poczynajšc od korzenia */
void print_tree(TREE T, int l);

/* funkcja insert (x, T) dodaje wartosc x do drzewa T */
TREE insert(ETYPE x, TREE T);

/* funkcja */
void int find(ETYPE x, TREE T, int l); // FUNKCCJA DO NAPISANIA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

void del(TREE T, ETYPE x);

TREE find(ETYPE x, TREE T);


int main(void)
{
  char s[80];
  root = NULL;  /* inicjacja korzenia */
  do {
    printf("Wpisz litere i nacisnij Enter (sam Enter konczy tworzenie drzewa): ");
    gets(s);
    root = insert(*s, root);
  } while(*s);
  printf("\n\nWyswietlanie drzewa z lewa na prawo (zamiast z gory w dol)");
  printf("\n\n");
  print_tree(root, 0);
  printf("Usun z drzewa element : ");
  gets(s);
  del(root, *s);
  print_tree(root, 0);
  printf("\n\n");
  printf("Nacisnij Enter aby zakonczyc program");
  gets(s);
  return 0;
}

TREE insert(ETYPE x, TREE T)
{
	if (T == NULL) {
		T = (TREE) malloc(sizeof(struct NODE));
		T->element = x;
		T->left = NULL;
		T->right = NULL;
	}
	else if (x < T->element)
		T->left = insert(x, T->left);
	else if (x > T->element)
		T->right = insert(x, T->right);
	return T;
}


void print_tree(TREE T, int l)
{
  int i;
  if(!T) return;
  print_tree(T->right, l+1);
  for(i=0; i<l; ++i) printf("   ");
  printf("%c\n", T->element);
  print_tree(T->left, l+1);
}


void del(TREE T, ETYPE x) {
    TREE tmp;
    
    tmp = find(x, T);
    if ((!tmp->left)&&(!tmp->right)) {
        free(tmp);    
    }
    printf("%c\n", tmp->element);   
} 

TREE find(ETYPE x, TREE T) {
    if (T) {
        if (x == T->element) return T;
        else if (x < T->element)
                return find(x, T->left);
        else if (x > T->element)
                return find(x, T->right);
        else return NULL;              
    }   
}