示例#1
0
No *remocao(No **paiRaiz, int valorInserido){
	if(*paiRaiz == NULL) printf("O valor %d não existe na Arvore\n", valorInserido);
	else{
		if(valorInserido < (*paiRaiz)->numero) remocao(&(*paiRaiz)->esq,valorInserido);
		else if(valorInserido > (*paiRaiz)->numero) remocao(&(*paiRaiz)->dir,valorInserido);
		
		else{
			if((*paiRaiz)->esq != NULL){
				No *auxiliar = maisDireita(&(*paiRaiz)->esq);
				(*paiRaiz)->numero = auxiliar->numero;

				(*paiRaiz)->esq = remocao(&(*paiRaiz)->esq, auxiliar->numero);
			}
			else if((*paiRaiz)->dir != NULL){
				No *auxiliar = maisEsquerda(&(*paiRaiz)->dir);
				(*paiRaiz)->numero = auxiliar->numero;

				(*paiRaiz)->dir = remocao(&(*paiRaiz)->dir, auxiliar->numero);
			}
			else{
				printf("O valor %d foi removido!\n", (*paiRaiz)->numero);
				(*paiRaiz) = NULL;
			}			
		}
	}
	return (*paiRaiz);
}
示例#2
0
void remover_No (ArvBin* arv, int x){
	ArvBin* ref = buscar_no(arv, x);
	
	if (ref->esq->valor == NULL && (ref->dir->valor == NULL)){
		free (ref->valor);
		ref->valor = NULL;
		return;
	}

	if (ref->esq->valor == NULL){
		*ref = *ref->dir;
	}
	else if (ref->dir->valor == NULL){
		*ref = *ref->esq;
	}

	ArvBin* refMaisDireita = maisDireita(ref->esq);
	*ref->valor = *refMaisDireita->valor;
	remover_No(arv->esq, *ref->valor); 
}
示例#3
0
ArvBin* maisDireita (ArvBin* arv){
	if(arv->dir->valor == NULL)
		return arv;
	else
		return maisDireita(arv->dir);
}