typedef struct no_arvore no_arvore; struct no_arvore { int numero; no_arvore *esq, *dir; }; no_arvore *inserir(no_arvore *raiz, int valor) { if (raiz == NULL) { no_arvore *novo_no = malloc(sizeof(no_arvore)); novo_no->numero = valor; novo_no->esq = NULL; novo_no->dir = NULL; return novo_no; } if (valor < raiz->numero) raiz->esq = inserir(raiz->esq, valor); else raiz->dir = inserir(raiz->dir, valor); return raiz; } int get_min(no_arvore *raiz) { if (raiz == NULL) return -1; if (raiz->esq == NULL) return raiz->numero; return get_min(raiz->esq); } no_arvore *remover(no_arvore *raiz, int valor) { if (raiz == NULL) return NULL; if (raiz->numero < valor) raiz->dir = remover(raiz->dir, valor); else if (raiz->numero > valor) raiz->esq = remover(raiz->esq, valor); else { if (raiz->esq == NULL) { no_arvore *tmp = raiz->dir; free(raiz); return tmp; } if (raiz->dir == NULL) { no_arvore *tmp = raiz->esq; free(raiz); return tmp; } int sucessor = get_min(raiz->dir); raiz->dir = remover(raiz->dir, sucessor); raiz->numero = sucessor; } return raiz; }