Compreendendo a árvore vermelho-preto. Parte 2. Balanceamento e inserção

Parte 1. Introdução

Parte 2. Balanceamento e inserção





Esta é a parte 2 da série Understanding Red-Black Tree. Se você perdeu a primeira parte, recomendo dar uma olhada aqui . Lá, resolvemos o motivo do surgimento do cchd e colocamos algumas de suas propriedades nas prateleiras.





Nesta parte, daremos uma olhada na inserção e no balanceamento. Essas coisas vão lado a lado, sem equilíbrio, a árvore perderá suas propriedades, e haverá pouco sentido nisso.





Tendo em mente que kchd é uma árvore 2-3 (às vezes vou lembrá-lo disso), começaremos imediatamente com sua construção. Mas alguns esclarecimentos ainda são necessários agora.





  1. Todos os nós inseridos, exceto a raiz da árvore, são inseridos com a cor vermelha. Isso é explicado pelo fato de que sempre primeiro adicionamos um valor a um nó já existente e só depois fazemos o balanceamento (lembre-se da situação com os 4 nós resultantes).





  2. Na primeira parte, descobrimos que estamos desmontando uma árvore vermelho-preta do lado esquerdo , daí segue que os nós vermelhos só podem estar à esquerda (o caso oposto requer equilíbrio).





Vamos também lidar com as três operações de que precisamos ao balancear. Peço que não pensem neles agora e se aprofundem em mais detalhes já durante a construção da árvore. Vou fornecer uma descrição deles aqui para que não interfiram mais tarde :)





- . , , -. , . - .





, . , .





( )

. .





ilustração da curva à esquerda

, parentNode ( parentNode - x, childNode - y) childNode, . ! , , childNode , parentNode , ( , childNode - , , parentColor = RED, ). "" childNode (, tempNode). , . , childNode, parentNode, childNode, , (/) parentNode, parentNode .





( )

, . .





ilustração da curva à direita

, parentNode . , parentNode - . , .





, ( , ), parentNode! ( ). .





- .

, .





24. . , , .





, , 5. , .





1 5. . , !





, - ( ). . - . , - . \ . , .





. , , , .





, 3 : , , .





1 , . . 5 - , ( ). 24 , , .





. - . , . - 24. .





, . ! . ( 24 , , )





( )! 2-3 .





, 2-3 ("" + ), , :) , , 2-3 , - , , "" .





. 15. 24. .





3. , 1, -1.





, . . + . ( , , ). , .





! .





, - , .





- 8. , . . , , .





+ .





, ( 15) - , . . , - . . !





- - .





, . , , . . .





. , . 2-3 ( 13 16, , ).





- , , \. .





, , .





  1. -





  2. -





  3. - - , . , , . , !





- , . , , . , !





Agora você pode repassar a construção da árvore novamente e analisar, verificar as propriedades do primeiro artigo, fazer as perguntas "e se ...?" (acredite, isso é muito útil!). Em geral, isso é tudo que eu queria dizer sobre a inserção de um nó em uma árvore vermelho-preta do lado esquerdo.





Um pouco sobre a operação de pesquisa de valor

A operação de obtenção não será diferente de pesquisar em qualquer outra árvore binária - a cor não está envolvida de forma alguma.





Conclusão

Isso conclui nossa segunda parte sobre a inserção e o balanceamento do ccd. Tire suas dúvidas, critique e complemente o artigo abaixo! Na terceira parte final, irei falar sobre o tópico mais difícil da árvore vermelho e preto - deletar um elemento. Vê você:)








All Articles