Java - Como puedo eliminar el nodo raiz de un arbol binario?

 
Vista:
Imágen de perfil de Salvador
Val: 37
Ha disminuido su posición en 18 puestos en Java (en relación al último mes)
Gráfica de Java

Como puedo eliminar el nodo raiz de un arbol binario?

Publicado por Salvador (12 intervenciones) el 20/06/2020 23:52:15
Tengo un problema hice un método para eliminar nodos de un árbol binario pero al momento de intentar borrar el nodo raíz no funciona, pero si funciona cuando borro cualquier otro nodo, alguien que me pueda decir cual es mi error ?
código:
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
54
55
56
57
public NodoArbol elimina(String str){
   NodoArbol d=derecho,i=izquierdo,aux1,aux2,aux3,ret;//se declara los apuntadores de ramas
   int aux=str.compareTo(nombre);
   if (aux==0){
       if( (derecho!=null) && (null!=izquierdo) ){
           aux1= izquierdo;
           if(aux1.derecho==null){
                aux1.derecho=derecho;
                return aux1;
            }else{
               while(aux1!=null){
                   if(aux1.derecho.derecho==null){
                       if(aux1.derecho.izquierdo==null){
                           d=aux1.derecho.derecho;
                           i=aux1.derecho.izquierdo;
                           aux2=aux1.derecho;
                           aux1.derecho=null;
                           return aux2;
                        }else{
                           aux3=aux1.derecho.izquierdo;
                           d=aux1.derecho.derecho;
                           i=aux1.derecho.izquierdo;
                           aux2=aux1.derecho;
                           aux3=aux1.derecho;
                           return aux2;
                        }
                    }
                    aux1=aux1.derecho;
                }
               return this;
            }
        }
      ret= (izquierdo==null)? derecho:izquierdo;
      return ret;
    }
 
    if(aux<0){
        if(izquierdo!=null){
            izquierdo= izquierdo.elimina(str);
            return this;
        }else{//entonces izquierdo es nulo, y si es nulo entonces no se encontro
            System.out.println("No se encuentra el valor " + str + " en el arbol.");
            return this ;
        }
    }else{
        if(aux>0){
            if(derecho !=null){
                derecho= derecho.elimina(str);
                return this;
            }else{//entonces derecho es nulo, y si es nulo entonces no se encontro
                System.out.println("No se encuentra el valor " + str + " en el arbol.");
                return this;
            }
        }
    }
     return this;
}
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 Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Como puedo eliminar el nodo raiz de un arbol binario?

Publicado por Rodrigo (623 intervenciones) el 21/06/2020 01:21:27
No entiendo el codigo que publicas, pero suponiendo que funciona bien como dices, un truco que puedes usar para remover la raiz es crear un nodo artificial cuyo hijo sea la raiz, borrar el dato contenido en la raiz y luego usar el nodo artificial para retornar el arbol corregido

Osea si tienes

1
2
3
raiz
/  \
a  b
hacer

1
2
3
4
5
artificial
  /.   \
null   raiz
       /. \
      a    b

Como digo, si tu codigo esta bien y borra adecuadamente cualquier nodo, entonces sera capaz de eliminar desde este nuevo arbol.
Luego bastara retornar como retorno a lo que apunte la nueva raiz (olvidandose de la nueva raiz). Osea retornar artificial.hijoderecho
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 Salvador
Val: 37
Ha disminuido su posición en 18 puestos en Java (en relación al último mes)
Gráfica de Java

Como puedo eliminar el nodo raiz de un arbol binario?

Publicado por Salvador (12 intervenciones) el 21/06/2020 04:13:53
Gracias lo voy a intentar
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 Salvador
Val: 37
Ha disminuido su posición en 18 puestos en Java (en relación al último mes)
Gráfica de Java

Como puedo eliminar el nodo raiz de un arbol binario?

Publicado por Salvador (12 intervenciones) el 21/06/2020 04:48:19
Y por ejemplo como le puedo hacer que el nodo raíz artificial no aparezca en pantalla?
es que le puse vació("") al nodo artificial y ahora quiero que no se muestre en el JFrame, me sale asi como la foto:
Captura-de-pantalla-86

Y yo lo quiero asi:

Captura-de-pantalla-87
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