Skip to content

Instantly share code, notes, and snippets.

@tysm
Created August 27, 2017 21:51
Show Gist options
  • Save tysm/fd4f309a5a83d43ff006b2adaa2ca1d2 to your computer and use it in GitHub Desktop.
Save tysm/fd4f309a5a83d43ff006b2adaa2ca1d2 to your computer and use it in GitHub Desktop.

Árvore Vermelho Preto / Rubro Negra / Red Black

  • Tipo de árvore balanceada.
  • Operações básicas em O(log n) no pior caso, onde n = quantidade de nós.
  • Inventadas por Bayer com nome de "Árvores Binárias Simétricas" em 1972, 10 anos depois da árvore AVL.

Estrutura

  • Cada nó possui:
Uma cor, vermelho ou preto, ou é nó NIL (fictício/NULO ou sentinela).
Ponteiros para a subárvore esquerda e direita e para o nó que contém este nó.

Regras

  • Nenhum caminho da raiz até um dado nó será maior que duas vezes o comprimento de qualquer outro.
  • Altura máxima de 2*log(n + 1), onde n = quantidade de nós.
  • A raiz sempre preta.
  • Toda folha (nó NIL) é considerada preta.
  • Se um nó é vermelho seus nós à esquerda e à direita são pretos.
  • Todos caminhos a partir da raiz até uma dada folha passam pelo mesmo número de nós pretos.
  • Corolário: não pode existir dois nós vermelhos consecutivos.

Inserção

  • Inicialmente, ocorre a busca pela posição do novo nó, em seguida, procede-se o método de uma árvore binária qualquer.
  • Após a inserção, as regras são testadas.
  • Caso a árvore esteja desbalanceada, são realizadas rotações e/ou ajustes de cor para reestabelecer o balanceamento.
  • O nó inserido sempre é vermelho.
  • Corolário: caso a inserção seja feita numa árvore vazia, a única operação a ser realizada será a mudança de cor da raiz (de vermelho para preto).

Remoção

  • Inicialmente, ocorre a busca pelo nó a ser deletado, em seguida, procede-se o método de uma árvore binária qualquer.
  • Caso a remoção efetivada seja em um nó vermelho, não é necessário o rebalanceamento.
  • Caso contrário, significa que a quantidade de nós pretos num determinado caminho foi alterada, então é necessário testas as regras e realizar as devidas rotações e/ou ajustes de cor.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment