3

Estoy programando un arbol genealogico en java, el arbol debe ser binario y los padres debe estar en la rama izquierda del hijo, mientras la madre debe debe estar en el derecho. donde se guardan los nombres de cada persona en cada nodo. Ya que debe ser una adicion especifica y con strings y no como un arbol regular con enteros decidi simplemente hacer nodos con un string para el nombre y un valor 1 o 2 para decidir en que rama se colocara. Estoy intentando programar un buscador que encuentre x nodo que sea contenga el nombre solicitado por el usuario, este es el metodo.

   public void search(Nodo raiz)
    {
        Nodo aux = raiz;
        while(aux.persona != nombre)
        {
            while(hojaIzqPadre != null)
            {
                if(nombre != aux.hojaIzqPadre.persona)
                {
                    aux = aux.hojaIzqPadre;
                    search(aux);
                }
            }
            while(hojaDerMadre != null)
            {
                if(nombre != aux.hojaDerMadre.persona)
                {
                    aux = aux.hojaDerMadre;
                    search(aux);
                }

            }
        }
    }

Sin embargo, despues de intentar varias formas el programa se cuelga o simplemente me da un error mostrando que las hojas estan vacias. Este es un error de logica y deberia intentar algun otro modo de buscar este nodo o acaso el recorrido esta mal? No encuentro donde esta la falla.

Metodo para insertar un nodo. (Falta un par de posibles resultados pero no afectan el programa en si)

public void insert(String persona, int valor)
{
    Nodo g = new Nodo(persona, valor);
    if(raiz == null)
    {
        raiz = g;
    }
    else if(valor == 1)

    {
        raiz.setHojaIzqPadre(g); 
    }
    else if(valor == 2)

    {
        raiz.setHojaDerMadre(g);
    }
}

Y el codigo del nodo

public class Nodo
{
    int valor;
    public String persona;
    public Nodo padre;
    public Nodo hojaIzqPadre;
    public Nodo hojaDerMadre;
    Nodo next;

    public Nodo(String persona, int valor)
    {
        this.persona = persona;
        this.valor = valor;
    }

    public void setPersona(String persona)
    {
        this.persona = persona;
    }

    public String getPersona()
    {
        return persona;
    }

    public Nodo getPadre()
    {
        return padre;
    }

    public void setPadre(Nodo padre)
    {
        this.padre = padre;
    }

    public Nodo getHojaIzqPadre()
    {
        return hojaIzqPadre;
    }

    public String getName()
    {
        return persona;
    }

    public void setHojaIzqPadre(Nodo hojaIzqPadre) 
    {
        this.hojaIzqPadre= hojaIzqPadre;
    }

    public Nodo getHojaDerMadre() 
    {
        return hojaDerMadre;
    }

    public void setHojaDerMadre(Nodo hojaDerMadre) 
    {
        this.hojaDerMadre = hojaDerMadre;
    }

}
PCorral
  • 41
  • 1
  • 1
    Los Strings se comparan con equals no con == – JDev Jul 03 '18 at 07:24
  • 2
    Te voto positivo por la pregunta y el esfuerzo: has puesto el código y explicado el problema, pero creo que debo votar para cerrar porque la pregunta tiene ya una respuesta en el enlace. En cualquier caso, bienvenido a SOes :) – Pablo Lozano Jul 03 '18 at 07:49

0 Answers0