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.
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).
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 :)
- . , , -. , . - .
, . , .
( )
. .
, parentNode ( parentNode - x, childNode - y) childNode, . ! , , childNode , parentNode , ( , childNode - , , parentColor = RED, ). "" childNode (, tempNode). , . , childNode, parentNode, childNode, , (/) parentNode, parentNode .
( )
, . .
, 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, , ).
- , , \. .
, , .
-
-
- - , . , , . , !
- , . , , . , !
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ê:)