Java - busueda en arboles binarios

 
Vista:
sin imagen de perfil

busueda en arboles binarios

Publicado por Raidel (9 intervenciones) el 04/02/2016 22:11:12
hola. He intento hacer un método que dado la informacion de un nodo de un árbol binario me devuelva el nodo que contiene esa información. pero el problema es que solo busca por su rama izquierda. La implementacion que he hecho es esta:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public NodoAB<E> FindNode(E node)// throws Exception
    {
         return FinNodeR (getRaiz(),node);
    }
 
    private NodoAB<E> FinNodeR(NodoAB<E> cursor, E node)
    {
        if(cursor.getInfo().equals(node))
            return cursor;
        if(cursor.getHijoIzquierdo()!=null)
            return FinNodeR(cursor.getHijoIzquierdo(), node);
        if(cursor.getHijoDerecho()!=null)
            return FinNodeR(cursor.getHijoDerecho(), node);
        return null;
    }

Por favor que alguien me ayude a encontrar el error
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

busueda en arboles binarios

Publicado por arck (145 intervenciones) el 04/02/2016 23:12:22
creo que no has entendido la idea de como van los arboles binarios.

Si tu bajas por el lado izquierdo y no lo encuentras al subir tienes que seguir comprobando los otros lados.

En este caso cuando bajas lo haces bien, pero al subir metes un return que no debería estar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

busueda en arboles binarios

Publicado por Raidel (9 intervenciones) el 05/02/2016 03:43:38
ya se que que ese es mi error pero no se como arreglarlo, pues si quieto la linea return null; (que de ser a la que te refieres) el programa me da un error diciendo que el metodo no devuelve un valor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

busueda en arboles binarios

Publicado por Raidel (9 intervenciones) el 05/02/2016 03:58:21
yo se que ese es mi error, pero no se como arreglarlo. Si quito la ultima linea return null; (que debe ser a la que te refieres) el programa me da un error que dice que el metodo no esta devolviendo un valor. Puedes decirme como lo arreglo.
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

busueda en arboles binarios

Publicado por arck (145 intervenciones) el 05/02/2016 07:43:39
En este caso no es el return null.
Si te fijas los return que sobran son los de la vuelta de recorrer el hijo derecho y el izquierdo.
En vez de eso deberias tener una comprobacion que mire si la vuelta es nulo o no y en caso de ser nulo comprobar el lado derecho del arbol o en caso de ser la vuelta del mado defecho ir al return nulo

La forma mas clara de verlo es hacer la traza a mano de un arbol de 2 niveles.

Intentalo y me cuentas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

busueda en arboles binarios

Publicado por Raidel (9 intervenciones) el 05/02/2016 19:52:45
ya tengo la solucion:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public NodoAB<E> FindNode(E node)// throws Exception
    {
         return FinNodeR (getRaiz(),node);
    }
 
    private NodoAB<E> FinNodeR(NodoAB<E> cursor, E node)
    {
        if(cursor.getInfo().equals(node))
            return cursor;
        NodoAB<E> aux=null;
        if(cursor.getHijoIzquierdo()!=null)
        {
            aux = FinNodeR(cursor.getHijoIzquierdo(), node);
        }
        if(aux==null)
        {
            if(cursor.getHijoDerecho()!=null)
            {
                aux = FinNodeR(cursor.getHijoDerecho(), node);
            }
 
 
        }
 
        return aux;
 
    }

muchas gracias por su opinion
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

busueda en arboles binarios

Publicado por arck (145 intervenciones) el 05/02/2016 23:44:10
Me gusta ver que te salio a ti solo.
Ahora a por mas.

Espero que hayas entendido como funcionan los arboles binarios
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar