Пример #1
0
 //ORDEM - Recebe a arvore como parametro
 public void EmOrdem(Nodo theraiz)
 {
     if (!(theraiz == null))
     {
         EmOrdem(theraiz.Esquerdo);
         theraiz.MostrarnaTela();
         EmOrdem(theraiz.Direito);
     }
 }
Пример #2
0
        public bool Excluir(int chave)
        {
            Nodo current = raiz;
            Nodo parent = raiz;
            bool filhosEsquerda = true;
            while (current.valor != chave)
            {
                parent = current;
                if (chave < current.valor)
                {
                    filhosEsquerda = true;
                    current = current.Esquerdo;
                }
                else
                {
                    filhosEsquerda = false;
                    current = current.Direito;
                }

                if (current == null)
                {
                    return false;
                }
                if ((current.Esquerdo == null) && (current.Direito == null))
                {
                    if (current == raiz)
                    {
                        raiz = null;
                    }
                    else if (filhosEsquerda)
                    {
                        parent.Esquerdo = null;
                    }
                    else
                    {
                        parent.Direito = null;
                    }
                }
                else if (current.Direito == null)
                {
                    if (current == raiz)
                    {
                        raiz = current.Esquerdo;
                    }
                    else if (filhosEsquerda)
                    {
                        parent.Esquerdo = current.Esquerdo;
                    }
                    else
                        parent.Direito = current.Direito;
                }
                else if (current.Esquerdo == null)
                {
                    if (current == raiz)
                    {
                        raiz = current.Direito;
                    }
                    else if (filhosEsquerda)
                    {
                        parent.Esquerdo = current.Direito;
                    }
                    else
                    {
                        parent.Direito = current.Direito;
                    }
                }
                Nodo successor = RetornaSuccessor(current);
                if (current == raiz)
                    raiz = successor;
                else if (filhosEsquerda)
                    parent.Esquerdo = successor;
                else
                    parent.Direito = successor;
                successor.Esquerdo = current.Esquerdo;
            }
            return true;
        }
Пример #3
0
 public ABP()
 {
     raiz = null;
 }
Пример #4
0
 public Nodo RetornaSuccessor(Nodo delNode)
 {
     Nodo successorParent = delNode;
     Nodo successor = delNode;
     Nodo current = delNode.Direito;
     while (!(current == null))
     {
         successorParent = current;
         successor = current;
         current = current.Esquerdo;
     }
     if (!(successor == delNode.Direito))
     {
         successorParent.Esquerdo = successor.Direito;
         successor.Direito = delNode.Direito;
     }
     return successor;
 }
Пример #5
0
        public void Inserir(int v)
        {
            Nodo novoNo = new Nodo();

            novoNo.valor = v;

            if (raiz == null) // se a arvore for vazia, inicia uma nova árvore
            {
                raiz = novoNo;
            }
            else //se a árvore nao estiver vazia, a inserção será feita em seu devido lugar
            {
                Nodo current = raiz; //ramificação atual

                Nodo parent; //ramificação ancestral

                while (true) //a condição de parada não é variável, o laço while será parado pela condição 'break',
                {                   //que indicará que o item inserido chegou na raiz da árvore

                    parent = current;

                    if (v < current.valor) // se o nó a ser inserido for menor que o nó a ser comparado
                    {
                        current = current.Esquerdo; // nó corrente recebe o nó que está a esquerda do nó corrente
                        if (current == null) // se o nó corrente for vazio
                        {
                            parent.Esquerdo = novoNo; // o nó que está a esquerda do nó ancestral recebe o novo nó
                            break;
                        }
                    }
                    else // se o nó a ser inserido for maior que o nó a ser comparado
                    {
                        current = current.Direito;  // nó corrente recebe o nó que está a direita do nó corrente
                        if (current == null)  // se o nó corrente for vazio
                        {
                            parent.Direito = novoNo;  // o nó que está a esquerda do nó ancestral recebe o novo nó
                            break;
                        }
                    }
                }
            }
        }