Árvores binárias de busca - remoção

Considere uma árvore binária de busca definida por células

typedef struct no {
   int chave;
   struct no *esq, *dir;
} no;

Sua tarefa nesse exercício é implementar a operação de remoção na numa árvore binária de busca com raiz r. Para tanto, você deve submeter um arquivo contendo apenas:

  1. Os #include necessários para execução das instruções utilizadas no seu código.

  2. A definição da struct no.

  3. Uma função insere o valor xx na árvore binária de busca. O protótipo desta função deve ser:

no *remover (no *r, int x);
Sua função de remoção deve usar o antecessor no processo. Ele retorna a nova raiz da árvore e NULL, caso a chave a ser removida não esteja na árvore.