Esempio n. 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);
         }
     }
 }
Esempio n. 2
0
 // ----------------------------------------------------------------------------
 public object Minimo()
 {
     if (EsVacio())
     {
         return(null);
     }
     else
     {
         return(SubArbolIzq == null ? Raiz : SubArbolIzq.Minimo());
     }
 }
Esempio n. 3
0
 // ----------------------------------------------------------------------------
 public int Altura()
 {
     if (EsVacio())
     {
         return(0);
     }
     else
     {
         int AlturaIzq = (SubArbolIzq == null ? 0 : 1 + SubArbolIzq.Altura());
         int AlturaDer = (SubArbolDer == null ? 0 : 1 + SubArbolDer.Altura());
         return(AlturaIzq > AlturaDer ? AlturaIzq : AlturaDer);
     }
 }
Esempio n. 4
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());
     }
 }
Esempio n. 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);
     }
 }
Esempio n. 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);
     }
 }
Esempio n. 7
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;
         }
     }
 }