tipoNo* inserirElemento(int numero, tipoNo *raiz){
    tipoNo* novo = noNovo(numero);

    if(raiz == NULL){
        novo->cor = NEG;
        return novo;
    }

    tipoNo* aux = raiz;

    while(1){
        if(novo->dado == aux->dado){
            free (novo);
            return raiz;
        }

        else if(novo->dado < aux->dado){
            if(aux->noEsquerdo == NULL){
                aux->noEsquerdo = novo;
                novo->noPai = aux;
                return balanceamentoCaso1(raiz, novo);
            }

            else{
                aux = aux->noEsquerdo;
            }
        }

        else {
            if (aux->noDireito == NULL){
                aux->noDireito = novo;
                novo->noPai = aux;
                return balanceamentoCaso1(raiz, novo);
            }

            else{
                aux = aux->noDireito;
            }
        }
    }
}
tipoNo* balanceamentoCaso3(tipoNo* raiz, tipoNo* n){
    if(verificaCor(noTio(n)) == RUB){
        n->noPai->cor = NEG;
        noTio(n)->cor = NEG;
        noAvo(n)->cor = RUB;
        return balanceamentoCaso1(raiz, noAvo(n));
    }

    else{
        return balanceamentoCaso4(raiz, n);
    }
}
NO* balanceamentoCaso3(NO* raiz, NO* n) {
    if(verificaCor(noTio(n)) == RUB) { /*tem pai vermelho e tio vermelho, troca as cores*/
        n->pai->cor = NEG; /*Trocando a cor do pai, já que quando insere com vermelho, o pai nao pode ser também.*/
        noTio(n)->cor = NEG; /*Trocando a cor do tio*/
        noAvo(n)->cor = RUB;/*Trocando a cor do avô, para assim ficar: V, P, V*/
        return balanceamentoCaso1(raiz, noAvo(n));/*Caso o noAvo ja seja a raiz, entao nao pode ficar vermelha como
                                                deixei, vai cair no caso1 para deixar a raiz preta e retornar raiz.*/
    }

    else {
        return balanceamentoCaso4(raiz, n);
    }
}
NO* inserirElemento(NO* novo_aluno, NO *raiz) {
    NO* novo = noNovo(novo_aluno->nota1, novo_aluno->nota2, novo_aluno->nota3,novo_aluno->nome, novo_aluno->matricula);
    if(raiz == NULL) {
        novo->cor = NEG;
        return novo;
    }

    NO* aux = raiz;

    while(1) {
        if(novo_aluno->matricula == aux->matricula) {
            aux = novo; /*Substituindo o novo no lugar do antigo*/
            return raiz;
        }
        else if(novo_aluno->matricula < aux->matricula) {
            if(aux->esquerda == NULL) {
                aux->esquerda = novo;
                novo->pai = aux;
                return balanceamentoCaso1(raiz, novo);
            } else {
                aux = aux->esquerda;
            }
        }

        else {
            if (aux->direita == NULL) {
                aux->direita = novo;
                novo->pai = aux;
                return balanceamentoCaso1(raiz, novo);
            }

            else {
                aux = aux->direita;
            }
        }
    }
}