NO* conserta(NO** raiz, NO* no) {
    NO* aux;
    while((no != *raiz) && (verificaCor(no) == NEG)) {
        if(no == no->pai->esquerda) {
            aux = no->pai->direita;

            if(verificaCor(aux) == RUB) {
                aux->cor = NEG;
                no->pai->cor = RUB;
                rotacaoEsquerdaRR(&no->pai);
                aux = no->pai->direita;
                continue;
            }

            if(verificaCor(aux->esquerda) == NEG && verificaCor(aux->direita) == NEG) {
                aux->cor = RUB;
                no = no->pai;
                continue;
            }

            else if(verificaCor(aux->direita) == RUB) {
                aux->esquerda->cor = NEG;
                aux->cor = RUB;
                rotacaoDireitaRR(&aux);
                aux = aux->pai->direita;
                continue;
            }
            aux->cor = no->pai->cor;
            no->pai->cor = NEG;
            aux->direita->cor = NEG;
            rotacaoEsquerdaRR(&no->pai);
            no = *raiz;
        }

        else {
            aux = no->pai->esquerda;

            if(verificaCor(aux) == RUB) {
                aux->cor = NEG;
                no->pai->cor = RUB;
                rotacaoDireitaRR(&no->pai);
                aux = no->pai->esquerda;
                continue;
            }

            if(verificaCor(aux->esquerda) == NEG && verificaCor(aux->direita) == NEG) {
                aux->cor = RUB;
                no = no->pai;
                continue;
            }

            else if(verificaCor(aux->esquerda) == RUB) {
                aux->direita->cor = NEG;
                aux->cor = RUB;
                rotacaoEsquerdaRR(&aux);
                aux = aux->pai->esquerda;
                continue;
            }
            aux->cor = no->pai->cor;
            no->pai->cor = NEG;
            aux->esquerda->cor = NEG;
            rotacaoDireitaRR(&no->pai);
            no = *raiz;
        }
    }
    if(no != NULL) {
        no->cor = NEG;
    }
    return *raiz;
}
tipoNo* conserta(tipoNo** raiz, tipoNo* no){
    tipoNo* aux;
    while((no != *raiz) && (verificaCor(no) == NEG)){
        if(no == no->noPai->noEsquerdo){
            aux = no->noPai->noDireito;

            if(verificaCor(aux) == RUB){
                aux->cor = NEG;
                no->noPai->cor = RUB;
                rotacaoEsquerdaRR(&no->noPai);
                aux = no->noPai->noDireito;
                continue;
            }

            if(verificaCor(aux->noEsquerdo) == NEG && verificaCor(aux->noDireito) == NEG){
                aux->cor = RUB;
                no = no->noPai;
                continue;
            }

            else if(verificaCor(aux->noDireito) == RUB){
                aux->noEsquerdo->cor = NEG;
                aux->cor = RUB;
                rotacaoDireitaRR(&aux);
                aux = aux->noPai->noDireito;
                continue;
            }
            aux->cor = no->noPai->cor;
            no->noPai->cor = NEG;
            aux->noDireito->cor = NEG;
            rotacaoEsquerdaRR(&no->noPai);
            no = *raiz;
        }

        else{
            aux = no->noPai->noEsquerdo;

            if(verificaCor(aux) == RUB){
                aux->cor = NEG;
                no->noPai->cor = RUB;
                rotacaoDireitaRR(&no->noPai);
                aux = no->noPai->noEsquerdo;
                continue;
            }

            if(verificaCor(aux->noEsquerdo) == NEG && verificaCor(aux->noDireito) == NEG){
                aux->cor = RUB;
                no = no->noPai;
                continue;
            }

            else if(verificaCor(aux->noEsquerdo) == RUB){
                aux->noDireito->cor = NEG;
                aux->cor = RUB;
                rotacaoEsquerdaRR(&aux);
                aux = aux->noPai->noEsquerdo;
                continue;
            }
            aux->cor = no->noPai->cor;
            no->noPai->cor = NEG;
            aux->noEsquerdo->cor = NEG;
            rotacaoDireitaRR(&no->noPai);
            no = *raiz;
        }
    }

    if(no != NULL){
        no->cor = NEG;
    }
    return *raiz;
}