Exemple #1
0
 // Recorrido de un árbol binario en postorden
 public static string postorden(Nodo r)
 {
     if (r != null)
     {
         return(postorden(r.subarbolIzdo()) + postorden(r.subarbolDcho()) + r.visitar());
     }
     return("");
 }
Exemple #2
0
 //Devuelve el número de nodos que tiene el árbol
 public static int numNodos(Nodo raiz)
 {
     if (raiz == null)
     {
         return(0);
     }
     else
     {
         return(1 + numNodos(raiz.subarbolIzdo()) +
                numNodos(raiz.subarbolDcho()));
     }
 }
 //método interno para realizar la operación
 protected Nodo eliminar(Nodo raizSub, Comparador dato)
 {
     if (raizSub == null)
     {
         throw new Exception("No encontrado el nodo con la clave");
     }
     else if (dato.menorQue(raizSub.valorNodo()))
     {
         Nodo iz;
         iz = eliminar(raizSub.subarbolIzdo(), dato);
         raizSub.ramaIzdo(iz);
     }
     else if (dato.mayorQue(raizSub.valorNodo()))
     {
         Nodo dr;
         dr = eliminar(raizSub.subarbolDcho(), dato);
         raizSub.ramaDcho(dr);
     }
     else // Nodo encontrado
     {
         Nodo q;
         q = raizSub; // nodo a quitar del árbol
         if (q.subarbolIzdo() == null)
         {
             raizSub = q.subarbolDcho();
         }
         else if (q.subarbolDcho() == null)
         {
             raizSub = q.subarbolIzdo();
         }
         else
         { // tiene rama izquierda y derecha
             q = reemplazar(q);
         }
         q = null;
     }
     return(raizSub);
 }
Exemple #4
0
 protected Nodo buscar(Nodo raizSub, Comparador buscado)
 {
     if (raizSub == null)
     {
         return(null);
     }
     else if (buscado.igualQue(raizSub.valorNodo()))
     {
         return(raizSub);
     }
     else if (buscado.menorQue(raizSub.valorNodo()))
     {
         return(buscar(raizSub.subarbolIzdo(), buscado));
     }
     else
     {
         return(buscar(raizSub.subarbolDcho(), buscado));
     }
 }
        // método interno para susutituir por el mayor de los menores
        private Nodo reemplazar(Nodo act)
        {
            Nodo a, p;

            p = act;
            a = act.subarbolIzdo(); // rama de nodos menores
            while (a.subarbolDcho() != null)
            {
                p = a;
                a = a.subarbolDcho();
            }
            act.nuevoValor(a.valorNodo());
            if (p == act)
            {
                p.ramaIzdo(a.subarbolIzdo());
            }
            else
            {
                p.ramaDcho(a.subarbolIzdo());
            }
            return(a);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="buscado"></param>
        /// <returns></returns>
        public Nodo buscarIterativo(Object buscado)
        {
            Comparador dato;
            bool       encontrado = false;
            Nodo       raizSub    = raiz;

            dato = (Comparador)buscado;
            while (!encontrado && raizSub != null)
            {
                if (dato.igualQue(raizSub.valorNodo()))
                {
                    encontrado = true;
                }
                else if (dato.menorQue(raizSub.valorNodo()))
                {
                    raizSub = raizSub.subarbolIzdo();
                }
                else
                {
                    raizSub = raizSub.subarbolDcho();
                }
            }
            return(raizSub);
        }