Vamos assumir a seguinte definição de uma árvore vermelho-preta:
- É uma árvore de pesquisa binária.
- Cada nó é colorido em vermelho ou preto. A raiz é preta.
- Dois nós conectados por uma borda não podem ser vermelhos ao mesmo tempo.
- Aqui deve ser uma boa definição de uma folha NIL, como no wiki. A folha NIL é colorida em preto.
- Um caminho da raiz para qualquer folha NIL contém o mesmo número de nós pretos.
Questão
Suponha que você tenha implementado as operações insert
e delete
para a árvore vermelho-preta. Agora, se você receber uma árvore vermelha-preta válida, sempre haverá uma sequência insert
e delete
operações que a construirão?
Motivação
Esta questão é motivada por esta questão e pela discussão desta questão .
Pessoalmente, acredito que, se você imaginar uma árvore vermelha-preta válida que consiste apenas em nós pretos (o que implica que você está imaginando uma árvore perfeitamente equilibrada), há uma sequência insert
e delete
operações que a constroem. Contudo,
- Eu não sei como provar com precisão que
- Também estou interessado no caso mais geral
insert
delete
insert
edelete
operações?insert
edelete
; pode haver várias maneiras de fazer essas operações. b) Como as árvores RB são essencialmente árvores B da ordem 4, pode-se procurar inspiração. Os detalhes podem ser complicados, pois o mapeamento de RB para B (e / ou para trás) não é exclusivo.Respostas:
As operações de inserção e exclusão em uma árvore vermelho-preto incluem o balanceamento necessário para manter as propriedades vermelho-preto.
O problema com árvores negras vermelhas não inclinadas (esquerda ou direita) é que existem várias maneiras de restaurar a escuridão vermelha após a exclusão ou inserção básica.
Não é a inserção ou a exclusão que transforma a árvore, mas o reequilíbrio e a rotação que ocorrem posteriormente para preservar / restaurar a escuridão vermelha da árvore.
A descrição básica da árvore vermelho-preta não prescreve qual das rotas possíveis a seguir.
Pode não ser possível descobrir como reconstruir exatamente uma determinada árvore preta e vermelha, porque o reequilíbrio não precisa ser determinístico.
Isso foi "resolvido" com árvores negras vermelhas inclinadas para a esquerda.
Existe apenas uma maneira de fazer o balanceamento. Portanto, qualquer árvore preta vermelha inclinada pode ser reconstruída usando inserções e exclusões, porque o reequilíbrio / rotação é feito de uma maneira determinística específica.
Isso não significa que as árvores RB inclinadas à esquerda sejam melhores ou mais eficientes, o que ganham por um lado usando regras determinísticas de balanceamento, e perdem por outro por código de balanceamento mais complexo.
Eu acho que um algoritmo de balanceamento completo como Day-Stout-Warren seria mais eficiente.
fonte
insert
edelete
no livro CLRS, você pode criar uma árvore RB válida que consiste apenas em nós pretos . O truque é inserir mais nós do que o necessário e excluir os excessivos. O algoritmo irá eliminar nós vermelhos.