예제 #1
0
 // ----------------------------------------------------------------------------
 public void Agregar(object pElem)
 {
     if (Raiz == null)
     {
         Raiz = pElem;
     }
     else
     if (pElem.ToString().CompareTo(Raiz.ToString()) < 0)
     {
         if (SubArbolIzq == null)
         {
             SubArbolIzq = new CArbolBB(pElem);
         }
         else
         {
             SubArbolIzq.Agregar(pElem);
         }
     }
     else      // pElem.ToString().CompareTo(arbol.Raiz.ToString()) > 0
     {
         if (SubArbolDer == null)
         {
             SubArbolDer = new CArbolBB(pElem);
         }
         else
         {
             SubArbolDer.Agregar(pElem);
         }
     }
 }
예제 #2
0
        public string ToFixedSizeString()
        {
            StringBuilder sb = new StringBuilder();

            sb.Append(Grado.ToString().PadLeft(2, '0'));
            sb.Append('|');
            sb.Append(Raiz.ToString().PadLeft(2, '0'));
            sb.Append('|');
            sb.Append(Disponible.ToString().PadLeft(2, '0'));
            return(sb.ToString());
        }
예제 #3
0
 // ----------------------------------------------------------------------------
 public void PostOrden()
 {
     if (Raiz != null)
     {
         // ----- Procesar hijo Izq
         if (SubArbolIzq != null)
         {
             SubArbolIzq.PostOrden();
         }
         // ----- Procesar hijo Der
         if (SubArbolDer != null)
         {
             SubArbolDer.PostOrden();
         }
         // ----- Procesar la raiz
         Console.WriteLine(Raiz.ToString());
     }
 }
예제 #4
0
        /// <summary>
        /// </summary>
        /// <returns>Arvore com os galhos:
        ///           6
        ///         /   \
        ///        3     5
        ///       /       \
        ///      2         0
        ///     /           \
        ///    1             \
        /// </returns>
        public override string ToString()
        {
            int qtdEspacosLado = 3 * TamanhoMaiorGalho - 1;
            int qtdEspacosMeio = 1;

            string arvore = string.Format("{0}{1}\n", espacos(qtdEspacosLado), Raiz.ToString());

            for (int i = 0; i < TamanhoMaiorGalho; i++)
            {
                qtdEspacosLado--;
                arvore += $"{espacos(qtdEspacosLado)}/{espacos(qtdEspacosMeio)}\\\n";
                qtdEspacosLado--;
                qtdEspacosMeio += 2 + (GalhoDireita.ObterNumero(i) ?? " ").Length - (GalhoEsquerda.ObterNumero(i) ?? " ").Length;
                arvore         += $"{espacos(qtdEspacosLado)}{GalhoEsquerda.ObterNumero(i) ?? "/"}{espacos(qtdEspacosMeio)}{GalhoDireita.ObterNumero(i) ?? "\\"}\n";
                qtdEspacosMeio += 2;
            }

            return(arvore);
예제 #5
0
 // ----------------------------------------------------------------------------
 public CArbolBB Padre(object pRaiz)
 {
     if (EsVacio())
     {
         return(null);
     }
     else
     if (EsHijo(pRaiz))
     {
         return(this);
     }
     else
     if (pRaiz.ToString().CompareTo(Raiz.ToString()) < 0)
     {
         return(SubArbolIzq != null?SubArbolIzq.Padre(pRaiz) : null);
     }
     else
     {
         return(SubArbolDer != null?SubArbolDer.Padre(pRaiz) : null);
     }
 }
예제 #6
0
 // ----------------------------------------------------------------------------
 public CArbolBB SubArbol(object pRaiz)
 {
     if (EsVacio())
     {
         return(null);
     }
     else
     if (Raiz.Equals(pRaiz))
     {
         return(this);
     }
     else
     if (pRaiz.ToString().CompareTo(Raiz.ToString()) < 0)
     {
         return(SubArbolIzq != null?SubArbolIzq.SubArbol(pRaiz) : null);
     }
     else
     {
         return(SubArbolDer != null?SubArbolDer.SubArbol(pRaiz) : null);
     }
 }
예제 #7
0
 public string ParaAjusteTamanoCadena()
 {
     return($"{Raiz.ToString("0000000000;-000000000")}" + MetodosNecesarios.Separador.ToString() + $"{Order.ToString("0000000000;-000000000")}" + MetodosNecesarios.Separador.ToString() + $"{SiguientePosicion.ToString("0000000000;-000000000")}\r\n");
 }
예제 #8
0
 // ----------------------------------------------------------------------------
 public virtual void Eliminar(Object pRaiz)
 {
     if (EsVacio())
     {
         Console.WriteLine("ERROR. Elemento no encontrado...");
     }
     else
     {
         // ----- Verificar si la raiz es el elemento que se desea eliminar
         if (pRaiz.Equals(Raiz))
         {
             // Si no tiene hijos, eliminar la raiz o una hoja
             if (SubArbolIzq == null && SubArbolDer == null)
             {
                 Raiz = null;
             }
             else // árbol tiene por lo menos un hijo
             if (SubArbolIzq == null)     // ----- Solo tiene hijo derecho
             {
                 Raiz        = SubArbolDer.Raiz;
                 SubArbolIzq = SubArbolDer.SubArbolIzq;
                 SubArbolDer = SubArbolDer.SubArbolDer;
             }
             else
             if (SubArbolDer == null)         // ----- Solo tiene hijo izquierdo
             {
                 Raiz        = SubArbolIzq.Raiz;
                 SubArbolDer = SubArbolIzq.SubArbolDer;
                 SubArbolIzq = SubArbolIzq.SubArbolIzq;
             }
             else         // Tiene ambos hijos
             {
                 Raiz = SubArbolDer.Minimo();
                 SubArbolDer.Eliminar(Raiz);
             }
         }
         else
         // ----- Verificar si el elemento a eliminar esta en el hijo Izq
         if (pRaiz.ToString().CompareTo(Raiz.ToString()) < 0)
         {
             if (SubArbolIzq != null)
             {
                 SubArbolIzq.Eliminar(pRaiz);
             }
         }
         else
         // ----- Elemento a eliminar esta en el hijo Der
         if (SubArbolDer != null)
         {
             SubArbolDer.Eliminar(pRaiz);
         }
         // Verificar si los hijos son hojas vacias
         if (SubArbolIzq != null && SubArbolIzq.EsVacio())
         {
             SubArbolIzq = null;
         }
         if (SubArbolDer != null && SubArbolDer.EsVacio())
         {
             SubArbolDer = null;
         }
     }
 }