Java - Arbol Binario De Busqueda

 
Vista:
sin imagen de perfil
Val: 9
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Arbol Binario De Busqueda

Publicado por fernando (6 intervenciones) el 20/04/2018 02:54:32
Hola la idea es que ingreso palabras a un arbol binario, y si la palabra ya esta en el arbol tiene que sumar +1

Por ejemplo si quiero agregar este

string = "aaa!ccc aaa ccc.aaa,ggg:ccc!ccc(ddd)eee¡eee!eee¿eee?fff fff fff eee eee fff fff bbb ggg";
String[] split = texto.split("[. , ' ' ( ) ¡ ! ¿ ? ' :]+");

Queda el arreglo perfecto y suma palabras repetidas en los caso de "a", "b", 'c", "d", pero en "e" me agrega como un nodo mas en el arbol

Codigo nodo:

1
2
3
4
5
6
7
8
9
10
// ESTE ES EL NODO
public class NodoArbol {
 
    public String palabra;
    public int palabrasRepetidas;
    public NodoArbol izqNodoArbol;
    public NodoArbol derNodoArbol;
 
.....
}


Este es el metodo Agregar

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
28
29
30
31
private void AgregarRecursivo(NodoArbol nuevo, NodoArbol laRaiz) {
 
        if (Buscar(nuevo, this.raiz)) {  // esto es lo importante
 
//aca esta el resto del codigo para agregar
}
 
 
 
private boolean Buscar(NodoArbol nuevo, NodoArbol raiz) {
 
        if (raiz == null) {
            return false;
        }
 
        //la palabra esta en el arbol
        if (raiz.palabra.equals(nuevo.palabra)) {
            ++raiz.palabrasRepetidas;
            return true;
        } else {
 
            if (raiz.palabra.compareTo(nuevo.palabra) > 0) {
 
                return Buscar(nuevo, raiz.izqNodoArbol);
 
            } else{
                return Buscar(nuevo, raiz.derNodoArbol);
            }
 
        }
}
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
Imágen de perfil de Jose
Val: 130
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Arbol Binario De Busqueda

Publicado por Jose (46 intervenciones) el 21/04/2018 00:23:54
Hola si pudieras mostrar completo el metodo

1
2
3
4
5
6
private void AgregarRecursivo(NodoArbol nuevo, NodoArbol laRaiz) {
 
        if (Buscar(nuevo, this.raiz)) {  // esto es lo importante
 
//aca esta el resto del codigo para agregar
}

usar el metodo buscar que retorna un boolean se me hace raro para el metodo agregar,
otra cosa que puedes hacer ya verificar, es que ese nodo extra que te parece extraño no sea un error de tu arbol binario si no que el metodo split te retorno la palabra eee con un caracter extraño. Eso lo puedes verificar facil imprimiendo el vector que te retorna el split, de esta forma

1
2
3
4
5
6
string = "aaa!ccc aaa ccc.aaa,ggg:ccc!ccc(ddd)eee¡eee!eee¿eee?fff fff fff eee eee fff fff bbb ggg";
String[] split = texto.split("[. , ' ' ( ) ¡ ! ¿ ? ' :]+");
 
for(String str: split){
System.out.println("***"+str+"***");
}

los *** es para que veas si las palabras del split son iguales, sin que tenga un caracter extraño o espacio.

saludos,
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
Val: 9
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Arbol Binario De Busqueda

Publicado por fernando (6 intervenciones) el 21/04/2018 00:35:28
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
private void AgregarRecursivo(NodoArbol nuevo, NodoArbol laRaiz) {
 
        if (Buscar(nuevo, this.raiz)) {
            return; // busco si ya esta en el arbol EN CASO QUE ESTE SUMO +1
        }
        if (laRaiz.palabra.compareTo(nuevo.palabra)<0) //SI LA RAIZ ES MAYOR QUE EL NODO QUE QUIERO AGREGAR
        {
 
            if (laRaiz.izqNodoArbol == null) {
                laRaiz.izqNodoArbol = nuevo;
            } else {
                AgregarRecursivo(nuevo, laRaiz.izqNodoArbol);
            }
 
        } else { //si entra , es porque la raiz es menor que el nuevo nodo
 
            if (laRaiz.derNodoArbol == null) {
                laRaiz.derNodoArbol = nuevo;
            } else {
                AgregarRecursivo(nuevo, laRaiz.derNodoArbol);
            }
 
//                NodoArbol name = (laRaiz.derNodoArbol==null)?laRaiz.derNodoArbol=nuevo:AgregarRecursivo(nuevo, laRaiz.derNodoArbol);
        }
 
    }
 
 
 
 
    //BUSCO SI EL NODO YA ESTA EN EL ARBOL, EN CASO QUE ESTÉ, SUMO +1
    private boolean Buscar(NodoArbol nuevo, NodoArbol raiz) {
 
        if (raiz == null) {
            return false;
        }else{
 
        //la palabra esta en el arbol
        if (raiz.palabra.equals(nuevo.palabra)) {
            ++raiz.palabrasRepetidas;
            return true;
        } else {
 
            if (raiz.palabra.compareTo(nuevo.palabra) < 0) {
 
                return Buscar(nuevo, raiz.izqNodoArbol);
 
            } else{
                return Buscar(nuevo, raiz.derNodoArbol);
            }
 
        }
    }}

Hola jose, si lo del arreglo me fije, y estan bien no dejan espacios en blanco ¨fantasma¨, tipo " eee".
Ejecutándolo paso a paso si no me equivoco lo que estaba mal eran los comperTo pero igual lo sigo testeando.
Otra consulta, el metodo (Buscar(nuevo, this.raiz) dentro del metodo recursivo AgregarRecursivo(NooArbol nuevo, NodoArbol laRaiz) , esta mal, no? ya que a la vuelta del metodo recursivo ejecutaria el metodo Buscar() innecesariamente .
Saludos!
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
Imágen de perfil de Jose
Val: 130
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Arbol Binario De Busqueda

Publicado por Jose (46 intervenciones) el 21/04/2018 00:50:22
Asi es el metodo buscar debería estar en el metodo que invoca al agregarrecursivo, voy hacer un test usando tu codigo, y te cuento que al ojo todo me parece correcto, más a ya que el emetodo buscar en tu metodo recursivo baja la eficiencia de tu algoritmo
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
Val: 9
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Arbol Binario De Busqueda

Publicado por fernando (6 intervenciones) el 21/04/2018 01:05:05
Gracias jose no es necesario que hagas el test, el codigo que puse esta actualizado, con cambios, por lo que veo esta agregando bien todas las letras... Te agradezco mucho la ayuda! Fue el compareTo que hacia cosas raras, el segundo nodo con letra "e" no entraba en la rama correcta
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