public ArvoreBinaria() { this.raiz = null; }
public override No Remover(char info, No SubArvore) { No NoPai; if (SubArvore == null) // CASO A SUBARVORE SEJA NULA { return(null); } else { // PERCORRE RECURSIVAMENTE PARA CASOS EM QUE O VALOR SEJA MENOR QUE O RAIZ DA SUBARVORE if (info < SubArvore.info) { SubArvore.noEsquerdo = Remover(info, SubArvore.noEsquerdo); if (FatorDeBalanceamento(SubArvore) == -2)//here { if (FatorDeBalanceamento(SubArvore.noEsquerdo) <= 0) { SubArvore = RotacaoDireitaDireita(SubArvore); } else { SubArvore = RotacaoDireitaEsquerda(SubArvore); } } } // PERCORRE RECURSIVAMENTE PARA CASOS EM QUE O VALOR SEJA MAIOR QUE O RAIZ DA SUBARVORE else if (info > SubArvore.info) { SubArvore.noEsquerdo = Remover(info, SubArvore.noEsquerdo); if (FatorDeBalanceamento(SubArvore) == 2) { if (FatorDeBalanceamento(SubArvore.noEsquerdo) >= 0) { SubArvore = RotacaoEsquerdaEsquerda(SubArvore); } else { SubArvore = RotacaoEsquerdaDireita(SubArvore); } } } // CASO O VALOR SER DELETA SEJA IGUAL AO VALOR DO NÓ ATUAL else { if (SubArvore.noEsquerdo != null) { // PERCORRE PELO NÓ ESQUERDO PARA POR COMO SUCESSOR NoPai = SubArvore.noEsquerdo; while (NoPai.noEsquerdo != null) { NoPai = NoPai.noEsquerdo; } SubArvore.info = NoPai.info; SubArvore.noEsquerdo = Remover(info, SubArvore.noEsquerdo); // REALIZA O REBALACEAMENTO if (FatorDeBalanceamento(SubArvore) == 2) { if (FatorDeBalanceamento(SubArvore.noEsquerdo) >= 0) { SubArvore = RotacaoEsquerdaEsquerda(SubArvore); } else { SubArvore = RotacaoEsquerdaDireita(SubArvore); } } } else { return(SubArvore.noEsquerdo); } } } return(SubArvore); }
public virtual void Remover(char info) { if (this.raiz != null) this.raiz = this.Remover(info, this.raiz); }