override public void Inserir(int x)
 {
     raiz = Inserir(raiz, x);
 }
 override public void Remover(int x)
 {
     raiz = Remover(raiz, x);
 }
        private No Remover(No no, int x)
        {
            No ch, s;

            if (no == null)
            {
                Console.WriteLine(x + "nao encontrado");
                maisBaixo = false;

                return(no);
            }

            if (x < no.info)             // remover da subarvore a esquerda
            {
                no.noEsquerdo = Remover(no.noEsquerdo, x);

                if (maisBaixo == true)
                {
                    no = VerificarRemocaoSubarvoreEsquerda(no);
                }
            }
            else if (x > no.info)             // remover da subarvore a direita
            {
                no.noDireito = Remover(no.noDireito, x);

                if (maisBaixo == true)
                {
                    no = VerificarRemocaoSubarvoreDireita(no);
                }
            }
            else
            {
                // chave para remocao encontrada
                if ((no.noEsquerdo != null) && (no.noDireito != null))                 // 2 filhos
                {
                    s = no.noDireito;

                    while (s.noEsquerdo != null)
                    {
                        s = s.noEsquerdo;
                    }

                    no.info      = s.info;
                    no.noDireito = Remover(no.noDireito, s.info);

                    if (maisBaixo == true)
                    {
                        no = VerificarRemocaoSubarvoreDireita(no);
                    }
                }
                else                           // 1 filho ou nenhum filho
                {
                    if (no.noEsquerdo != null) // apenas o filho esquerdo
                    {
                        ch = no.noEsquerdo;
                    }
                    else                     // apenas o filho direito ou nenhum filho
                    {
                        ch = no.noDireito;
                    }

                    no        = ch;
                    maisBaixo = true;
                }
            }

            return(no);
        }
 public ArvoreAVL()
 {
     this.raiz = null;
 }