I have this code:
Arvore* arv_insere (Arvore* arvore, Registro* registro){
if (arvore == NULL){
printf(COLOR_RED "ERROR: Arvore não inicializada" COLOR_RESET "\n");
exit(1);
}
float direction = reg_compare(arvore->label, registro);
if (direction == 0.0){
printf(COLOR_RED "ERROR: Não permitimos chaves repetidas" COLOR_RESET "\n");
exit(1);
}
bool isTaller; // Avisa se a árvore filha que foi modificada ficou
// maior ou menor.
if (direction < 0) {
if (arvore->esq == NULL){
arvore->esq = arv_cria(registro);
// Ajustando balanceamento do nó criado e do nó atual.
arvore->esq->balanceamento = 0;
isTaller = true;
arvore->balanceamento = arvore->balanceamento - 1;
} else {
arvore->esq = arv_insere(arvore->esq, registro);
isTaller = arvore->esq->sizeChanged;
if (isTaller) {
arvore->balanceamento = arvore->balanceamento -1 ;
}
}
} else {
if (arvore->dir == NULL){
arvore->dir = arv_cria(registro);
// Ajustando balanceamento do nó criado e do nó atual.
arvore->dir->balanceamento = 0;
isTaller = true;
arvore->balanceamento = arvore->balanceamento + 1;
} else {
arvore->dir = arv_insere(arvore->dir, registro);
isTaller = arvore->dir->sizeChanged;
if (isTaller) {
arvore->balanceamento = arvore->balanceamento + 1;
}
}
}
// Nos veremos se geramos um balanceamento neste no da arvore. Se
// tivermos gerado, então balancearemos a árvore.
Arvore* nArvore = performRotations(arvore);
if (isTaller && nArvore->balanceamento == 0) {
nArvore->sizeChanged = false;
} else {
nArvore->sizeChanged = isTaller;
}
printf("SIZE CHANGED: %d \n" , nArvore->sizeChanged);
return nArvore;
}
In this code, what does the following excerpt do?
if (isTaller && nArvore->balanceamento == 0) {
nArvore->sizeChanged = false;
} else {
nArvore->sizeChanged = isTaller;
}