예제 #1
0
 public ArvoreBinaria()
 {
     this.raiz = null;
 }
예제 #2
0
        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);
        }
예제 #3
0
 public virtual void Remover(char info)
 {
     if (this.raiz != null)
     this.raiz  = this.Remover(info,  this.raiz);
 }