Foro de elhacker.net

Programación => Java => Mensaje iniciado por: [Black Vomit] en 11 Julio 2010, 00:38 am



Título: AYUDA JAVA POR FAVOR.
Publicado por: [Black Vomit] en 11 Julio 2010, 00:38 am
Saludos! bueno tengo un pequeño problema.  Estoy implementando un programa con menú, el cuál llama a diversos métodos que operan en un árbol binario en JAVA.   He implementando varios, sin embargo, me complica sólo uno, el Borrar Hoja.

Lo tengo implementando pero sé que hay un detalle por ahí, puesto que me arroja NULLPOINTER EXCEPTION cuando lo llamo desde mi case.

Acá les dejo el método BORRARNODOHOJA
Código:
boolean borrarNodoHoja(NodoBinario nodo) 
     { 
    boolean se_borro = false; 
    NodoBinario nodo_padre  = nodo.getPadre();
   
    if(nodo_padre.getDerecho() == nodo)
    { 
    nodo_padre.setDerecho(null); 
        } else
        { 
        nodo_padre.setIzquierdo(null);
        }
             nodo= null; 
             se_borro = true;
    return se_borro;   
     } 


Acá mi clase NOBODINARIO.JAVA

Código:
import javax.swing.*;
public class NodoBinario
{
   public int dato;
   public NodoBinario izdo;
   public NodoBinario dcho;
   private Object informacion;
   private NodoBinario padre;

    public NodoBinario(int t)
    {
    this.dato=t;
    this.izdo=null;
        this.dcho=null;
    }
   
    //MODIFICACIONES **********************************************************
   
public NodoBinario(Object informacion)
{
this.informacion = informacion;
this.izdo   = null;
this.dcho    = null;
}


public NodoBinario getDerecho()
{
return dcho;
}

public NodoBinario getIzquierdo()
{
return izdo;
}

public Object getInformacion()
{
return informacion;
}

public NodoBinario getPadre()
{
return padre;
}

public void setDerecho(NodoBinario derecho)
{
this.dcho = derecho;
}

public void setIzquierdo(NodoBinario izquierdo)
{
this.izdo = izquierdo;
}

public void setInformacion(Object informacion)
{
this.informacion = informacion;
}

public void setPadre(NodoBinario padre)
{
this.padre = padre;
}
//MODIFICACIONES **********************************************************





    /*public NodoBinario(NodoBinario ramaIzdo,int t,NodoBinario ramaDcho)
    {
    dato=t;
    izdo=ramaIzdo;
    dcho=ramaDcho;
    }*/
    public int valorNodo()    // Otorga el contenido del nodo, la información contenida en él
    {
  return dato;
    }

    public NodoBinario subarbolIzdo()
    {
  return izdo;
    }

    public NodoBinario subarbolDcho()
    {
  return dcho;
    }
    public void nuevoValor(int d)
    {
  dato=d;
    }
    public void ramaIzdo(NodoBinario n)
    {
  izdo=n;
    }

    public void ramaDcho(NodoBinario n)
    {
  dcho=n;
    }

    public void visitar()
    {
      JOptionPane.showMessageDialog(null, "El Nodo es: " +  dato+"\t");
    }
}

Acá el case en mi MAIN que llama al método.
Código:
                case 10:
                    arbol.borrarNodoHoja(arbol.raizArbol());
                    salida="NODO HOJA BORRADO EXITOSAMENTE";
                    asalida.setText(salida);
                    JOptionPane.showMessageDialog(null, asalida, "BORRAR NODO HOJA", JOptionPane.WARNING_MESSAGE);

                break;


Agradecido de antemano!


Título: Re: AYUDA JAVA POR FAVOR.
Publicado por: @synthesize en 11 Julio 2010, 00:45 am
¿Tanto cuesta postear en el subforo de Java?


Título: Re: AYUDA JAVA POR FAVOR.
Publicado por: [Black Vomit] en 11 Julio 2010, 00:45 am
¿Tanto cuesta postear en el subforo de Java?

Disculpa, no había notado el subforo. 


Título: Re: AYUDA JAVA POR FAVOR.
Publicado por: Blitzkrieg' en 11 Julio 2010, 00:45 am
¿Tanto cuesta postear en el subforo de Java?

Yo creo que no lo ven, deben ponerlo afuera de Programación General.


Título: Re: AYUDA JAVA POR FAVOR.
Publicado por: [Black Vomit] en 11 Julio 2010, 00:47 am
¿Tanto cuesta postear en el subforo de Java?

Yo creo que no lo ven, deben ponerlo afuera de Programación General.

Claro, acabo de registrarme, hace rato conozco la web pero no había tenido intenciones de participar, además de intentar que alguien me sugiera alguna solución a la problemática que plantié.  Sigo intentándolo de todas formas, jeje.



Título: Re: AYUDA JAVA POR FAVOR.
Publicado por: Leyer en 11 Julio 2010, 05:22 am
unas modificaciones y estará listo

http://www.acidxoft.0fees.net/arboles.htm


Título: Re: AYUDA JAVA POR FAVOR.
Publicado por: tragantras en 11 Julio 2010, 10:58 am
yo de ti comprobaría que la referencia al padre no es nula antes de pedirle ningun método o recibiras un nullpointerexception de regalo cuando invoques ese método sobre el nodo raiz.

Código
  1. boolean borrarNodoHoja(NodoBinario nodo)
  2.     {  
  3.     boolean se_borro = false;  
  4.     NodoBinario nodo_padre  = nodo.getPadre();
  5. /*---------------------------------------------------------------*/
  6.        if(nodo_padre==null) return false;
  7. /*---------------------------------------------------------------------*/  
  8.     if(nodo_padre.getDerecho() == nodo)
  9.     {  
  10.     nodo_padre.setDerecho(null);  
  11.        } else
  12.        {  
  13.         nodo_padre.setIzquierdo(null);
  14.        }
  15.             nodo= null;  
  16.             se_borro = true;
  17.     return se_borro;  
  18.     }