Esempio n. 1
0
        /// <summary>
        /// Insere um valor na árvore. não aceita valores repetidos, se o valor já existir ele devolve falso
        /// </summary>
        /// <param name="valor"></param>
        /// <returns> retorna falso se o valor já existir e verdadeiro se o valor for inserido com sucesso</returns>
        public bool Insere(Animal valor) // insere um valor int
        {
            NodoArvore no_aux;

            if (qtdeNodosInternos == 0) // árvore vazia!
            {
                // árvore vazia, devemos criar o primeiro Nodo, que será a raiz
                no_aux = new NodoArvore();
                raiz   = no_aux;
            }
            else
            {
                // localiza onde deve ser inserido o novo nó.
                no_aux = PesquisaValor(valor.Nome, raiz);
                if (no_aux.EhInterno())
                {
                    throw new Exception("Este animal já existe na árvore!!!!");
                }
            }
            // este era um Nodo externo e portanto não tinha filhos.
            // Agora ele passará a ser interno, portanto devemos criar outros 2
            // nodos externos (filhos) para ele.
            no_aux.SetValor(valor);
            no_aux.SetNoEsquerda(NodoArvore.CriaNoExterno(no_aux));
            no_aux.SetNoDireita(NodoArvore.CriaNoExterno(no_aux));
            qtdeNodosInternos++;
            return(true);
        }