コード例 #1
0
 protected nodo eliminar(nodo raizSub, Comparador dato)
 {
     if (raizSub == null)
     {
         throw new Exception("No hay nodo para eliminar");
     }
     else if (dato.menorQue(raizSub.valorNodo()))
     {
         nodo iz;
         iz = eliminar(raizSub.subarbolIzquierdo(), dato);
         raizSub.ramaIzquierda(iz);
     }
     else if (dato.mayorQue(raizSub.valorNodo()))
     {
         nodo dr;
         dr = eliminar(raizSub.subarbolDerecho(), dato);
         raizSub.ramaDerecha(dr);
     }
     else
     {
         nodo q;
         q = raizSub; //este es el nodo que se quita del árbol
         if (q.subarbolIzquierdo() == null)
         {
             raizSub = q.subarbolDerecho();
         }
         else if (q.subarbolDerecho() == null)
         {
             raizSub = q.subarbolIzquierdo();
         }
         else// tiene rama izquierda y derecha
         {
             q = reemplazar(q);
         }
         q = null;
     }
     return(raizSub);
 }//end eliminar
コード例 #2
0
        }//end eliminar

        protected nodo reemplazar(nodo act)
        {
            nodo a, p;

            p = act;
            a = act.subarbolIzquierdo(); //rama de nodos menores

            while (a.subarbolDerecho() != null)
            {
                p = a;
                p.subarbolDerecho();
            }
            act.nuevoValor(a.valorNodo());
            if (p == act)
            {
                p.ramaIzquierda(a.subarbolIzquierdo());
            }
            else
            {
                p.ramaDerecha(a.subarbolDerecho());
            }
            return(a);
        } //end nodo reemplazar