} // fim do método RotacionarParaEsquerda private void RotacionarParaDireita(NoArvore no) { NoArvore filho = no.Esquerda(); no.Esquerda(filho.Direita()); filho.Direita(no); this.AjustarPai(no, filho); } // fim do método RotacionarParaDireita
void RemoverPaiDeDois(NoArvore removido) { var noSubstituto = removido.NoAnterior(); var paiNoSubstituto = this.BuscarPaiDe(noSubstituto); if (paiNoSubstituto.Esquerda() == noSubstituto) { paiNoSubstituto.Esquerda(null); } else { paiNoSubstituto.Direita(null); } noSubstituto.Esquerda(removido.Esquerda()); noSubstituto.Direita(removido.Direita()); if (removido != this.raiz) { var paiNoRemovido = this.BuscarPaiDe(removido); if (paiNoRemovido.Esquerda() == removido) { paiNoRemovido.Esquerda(noSubstituto); } else { paiNoRemovido.Direita(noSubstituto); } } else { this.raiz = noSubstituto; } removido.Esquerda(null); removido.Direita(null); } // fim RemoverPaiDeDois
void removerPaiDeUm(NoArvore no) { var pai = BuscarPaiDe(no); var filho = no.HaDireita()? no.Direita(): no.Esquerda(); if (pai.Esquerda() == no) { pai.Esquerda(filho); } else { pai.Direita(filho); } } // fim removerPaiDeUm
int contar(Stack <NoArvore> nos, int contagem) { while (nos.Count != 0) { NoArvore no = nos.Pop(); contagem++; if (no.HaEsquerda()) { nos.Push(no.Esquerda()); } if (no.HaDireita()) { nos.Push(no.Direita()); } } return(contagem); } // fim contar