1111111
struct node * grandparent(struct node *n)
{
if ((n != NULL) && (n->parent != NULL)) return n->parent->parent; else return NULL;
}
struct node * uncle(struct node *n)
{
struct node *g = grandparent(n); if (g == NULL) return NULL; // No grandparent means no uncle if (n->parent == g->left) return g->right; else return g->left;
}
Regras: * Uma árvore rubro-negra estará sempre balanceada pois segue o seguinte conjunto de regras: * cada nó da árvore possui um valor * a cada novo nó inserido na árvore obedecerá o esquema de menor para o lado esquerdo e maior para o lado direito. * a cada nó é associada uma cor: vermelha ou preta. * o nó raiz é sempre preto. * nós vermelhos que não sejam folhas possuem apenas filhos pretos. para cada nó, todos os caminhos do nó até qualquer folha passa pelo mesmo número de nós pretos.
Regras – Inserção * A cada vez que uma operação é realizada na árvore, testa-se o conjunto de propriedades descritos anteriormente e são efetuadas rotações e ajuste de cores até que a árvore satisfaça todas estas regras. * Uma rotação é uma operação realizada na árvore para garantir seu balanceamento. Na rubro-negra pode ser feita a direita e a esquerda, onde são alterados os