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; } } } }