Código de Java - Arboles binarios de búsqueda

Versión 1
estrellaestrellaestrellaestrellaestrella(27)

Publicado el 30 de Noviembre del 2012gráfica de visualizaciones de la versión: Versión 1
178.546 visualizaciones desde el 30 de Noviembre del 2012
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
public class abb {
 
    private class nodoArbol {
        private abb hd;
        private abb hi;
        private int dato;
 
        private void nodoArbol(){
            hd = null;
            hi = null;
            dato = 0;
        }
    }
 
    public nodoArbol raiz;
 
    public void abb(){
        nodoArbol raiz = new nodoArbol();
    }
 
    public boolean esVacio(){
        return (raiz == null);
    }
 
    public void insertar(int a){
        if (esVacio()) {
            nodoArbol nuevo = new nodoArbol();
            nuevo.dato = a;
            nuevo.hd = new abb();
            nuevo.hi = new abb();
            raiz = nuevo;
        }
        else {
            if (a > raiz.dato) {
                (raiz.hd).insertar(a);
            }
            if (a < raiz.dato){
                (raiz.hi).insertar(a);
            }
        }
    }
 
    public void preOrder(){
        if (!esVacio()) {
            System.out.print( raiz.dato + ", "  );
            raiz.hi.preOrder();
            raiz.hd.preOrder();
        }
    }
 
    public void inOrder(){
        if (!esVacio()) {
            raiz.hi.inOrder();
            System.out.print( raiz.dato + ", "  );
            raiz.hd.inOrder();
        }
    }
 
    public void posOrder(){
        if (!esVacio()) {
            raiz.hd.posOrder();
            raiz.hi.posOrder();
            System.out.print( raiz.dato + ", "  );
 
        }
    }
 
    public abb buscar(int a){
        abb arbolito = null;
        if (!esVacio()) {
            if (a == raiz.dato) {
            return this;
            }
            else {
                if (a < raiz.dato) {
                    arbolito = raiz.hi.buscar(a);
                }
                else {
                    arbolito = raiz.hd.buscar(a);
                }
            }
        }
        return arbolito;
    }
 
    public boolean existe(int a){
    if (!esVacio()) {
            if (a == raiz.dato) {
            return true;
            }
            else {
                if (a < raiz.dato) {
                    raiz.hi.existe(a);
                }
                else {
                    raiz.hd.existe(a);
                }
            }
        }
        return false;
    }
 
    public int cantidad(){
        if (esVacio()) {
            return 0;
        }
        else {
            return (1 + raiz.hd.cantidad() + raiz.hi.cantidad());
        }
    }
 
    public int altura() {
        if (esVacio()) {
            return 0;
        }
        else {
            return (1 + Math.max(((raiz.hi).altura()), ((raiz.hd).altura())));
        }
    }
 
    public int buscarMin() {
        abb arbolActual = this;
        while( !arbolActual.raiz.hi.esVacio() ) {
            arbolActual = arbolActual.raiz.hi;
        }
        int devuelvo= arbolActual.raiz.dato;
        arbolActual.raiz=null;
        return devuelvo;
    }
 
    public int buscarMan() {
        abb arbolActual = this;
        while( !arbolActual.raiz.hd.esVacio() ) {
            arbolActual = arbolActual.raiz.hd;
        }
        int devuelvo= arbolActual.raiz.dato;
            arbolActual.raiz=null;
        return devuelvo;
    }
 
    public boolean esHoja() {
        boolean hoja = false;
        if( (raiz.hi).esVacio() && (raiz.hd).esVacio() ) {
            hoja = true;
        }
        return hoja;
    }
 
    public void eliminar(int a) {
        abb paraEliminar = buscar(a);
        if (!paraEliminar.esVacio()) {
            if (paraEliminar.esHoja()) {
                paraEliminar.raiz = null;
            }
            else {
                if (!paraEliminar.raiz.hi.esVacio() && !paraEliminar.raiz.hd.esVacio()) {
                    paraEliminar.raiz.dato = paraEliminar.raiz.hd.buscarMin();
                }
                else {
                    if (paraEliminar.raiz.hi.esVacio()) {
                        paraEliminar.raiz = paraEliminar.raiz.hd.raiz;
                    }else{
                        paraEliminar.raiz = paraEliminar.raiz.hi.raiz;
                    }
                }
            }
        }
    }
}



Comentarios sobre la versión: Versión 1 (27)

27 de Junio del 2014
estrellaestrellaestrellaestrellaestrella
Muy bueno amigo! estaba tratando de corregir el que tenía y no hallaba el error... creo que con este me puedo guiar.
Nuevamente muy bueno el aporte!
Responder
24 de Julio del 2014
estrellaestrellaestrellaestrellaestrella
Tengo problema al implementarlo en Netbeans, me genera el error <No main classes found>
Responder
Blanca
6 de Noviembre del 2017
estrellaestrellaestrellaestrellaestrella
Carece de un main para ejecutarse, por lo cual debes de implementarlo por tu cuenta
Responder
Papilobo
3 de Mayo del 2022
estrellaestrellaestrellaestrellaestrella
Jajajajajajajaja no mames te mamaste
Responder
Omar
24 de Octubre del 2014
estrellaestrellaestrellaestrellaestrella
te marca error porque no tiene metodo main() obviamente tienes que gerarlo desde otra clase y de ahi manipular los metodos de la clase abb
Responder
pedro
5 de Noviembre del 2014
estrellaestrellaestrellaestrellaestrella
amigos hago el metodo main y llamo los metodos con el apodo ab.eliminar(); por ejemplo pero no me deja , como si le faltara un parametro q penc q era a pero igual nada ayuda porfa
Responder
7 de Noviembre del 2014
estrellaestrellaestrellaestrellaestrella
Pedro, debes llamarlo con un parametro integer que seria el elemento a eliminar.
Ejemplo: ab.eliminar(4);
Responder
10 de Noviembre del 2014
estrellaestrellaestrellaestrellaestrella
hola, tengo este codigo. solo necesito acomodar en el metodo buscar, buscar por altura y anchura quien me ayuda.

import javax.swing.JOptionPane;
public class Arbol
{


private static NodoArbol Raiz;
public static String cad="";

public Arbol()
{
Raiz = null;
}

public static String PedirDato(String Cad){
return (JOptionPane.showInputDialog(null,"Digite un dato "+Cad));
}

public void InsertarNodo()
{
NodoArbol Nvo;
boolean Insertado=false;
NodoArbol R;
if(Raiz == null)
{
Raiz = new NodoArbol(PedirDato("a insertar "));
}
else
{
Nvo = new NodoArbol(PedirDato("a insertar "));
R=Raiz;
while(Insertado==false)
{
if(Nvo.Nombre.compareTo(R.Nombre)>0){
if(R.Der == null)
{
R.Der = Nvo;
R=Nvo;
Insertado=true;
}
else
{
R = R.Der;
}
}
if(Nvo.Nombre.compareTo(R.Nombre)<0)
{
if(R.Izq == null)
{
R.Izq = Nvo;
R=Nvo;
Insertado = true;
}
else
{
R= R.Izq;
}
}
}
}
}

public void eliminar(NodoArbol raiz, String dato){
if(raiz==null)
{
JOptionPane.showMessageDialog(null,"No encontrado");
}
else
if(raiz.Nombre.compareTo(dato)==0)
{
raiz.Nombre=ordenar (raiz);
ordenar(raiz);
JOptionPane.showMessageDialog(null,"Cambio hecho");
}
else
if(dato.compareTo(raiz.Nombre)<0)
{
eliminar(raiz.Izq,dato);
}
else
if(dato.compareTo(raiz.Nombre)>0)
{
eliminar(raiz.Der,dato);
}
}

public void buscar(NodoArbol raiz, String dato)
{
if(raiz==null)
{
JOptionPane.showMessageDialog(null,"No encontrado");
}
else
if(raiz.Nombre.compareTo(dato)==0)
{
JOptionPane.showMessageDialog(null,"Encontrado");
raiz=null;
}
else if(dato.compareTo(raiz.Nombre)<0)
{
eliminar(raiz.Izq,dato);
}
else
if(dato.compareTo(raiz.Nombre)>0)
{
eliminar(raiz.Der,dato);
}
}


public String ordenar(NodoArbol raiz){
if(raiz.Izq==null&&raiz.Der==null){
raiz=null;
return "0";
}
if(raiz.Izq==null){
String b="0";
NodoArbol a=raiz.Der;
while(a.Izq!=null){
a=a.Izq;
}
b=a.Nombre;
a.Nombre="0";
a=null;
return b;
}
String b="0";
NodoArbol a=raiz.Izq;
while(a.Der!=null){
a=a.Der;
}
b=a.Nombre;
a.Nombre="0";
a=null;
return b;

}

public void preorden(NodoArbol raiz)
{
if(raiz==null)
{
return;
}
else
{
if(raiz.Nombre.compareTo("0")!=0)
{
cad+=raiz.Nombre+" ";
}
preorden(raiz.Izq);
preorden(raiz.Der);
}
}

public void inorden(NodoArbol raiz)
{
if(raiz==null)
{
return;
}
else
{
inorden(raiz.Izq);
if(raiz.Nombre.compareTo("0")!=0)
{
cad+=raiz.Nombre+" ";
}
inorden(raiz.Der);
}
}

public void postorden(NodoArbol raiz)
{
if(raiz==null)
{
return;
}
else
{
postorden(raiz.Izq);
postorden(raiz.Der);
if(raiz.Nombre.compareTo("0")!=0)
{
cad+=raiz.Nombre+" ";
}
}
}

public static void recorrido(NodoArbol r,Arbol a)
{
String menu="RECORRIDOS\n"
+"1.-Presorden\n"
+"2.-Inorden\n"
+"3.-Postorden\n"
+"4.-Salir";
int opc=0;
do{
opc=Integer.parseInt(JOptionPane.showInputDialog(null,menu));
switch(opc)
{
case 1:cad="";a.preorden(r);JOptionPane.showMessageDialog(null,cad);break;
case 2:cad="";a.inorden(r);JOptionPane.showMessageDialog(null,cad);break;
case 3:cad="";a.postorden(r);JOptionPane.showMessageDialog(null,cad);break;
default: JOptionPane.showMessageDialog(null,"Opcion Incorrecta");
}
}while(opc!=4);
}

public static void main(String[] var)
{
Arbol a=new Arbol();
String menu="MENU\n"
+"1.-Insertar\n"
+"2.-buscar\n"
+"3.-Eliminar\n"
+"4.-Recorridos\n"
+"5.-Salir\n"
+"Digite una Opcion";
int opc=0;
do{
opc=Integer.parseInt(JOptionPane.showInputDialog(null,menu));
switch(opc)
{
case 1:a.InsertarNodo();break;
case 2:String x1=a.PedirDato("a buscar"); a.buscar(Raiz,x1); break;
case 3:String x=a.PedirDato("a eliminar"); a.eliminar(Raiz,x); break;
case 4:NodoArbol r=Raiz;a.recorrido(r,a);break;
default: JOptionPane.showMessageDialog(null,"Opcion Incorrecta");
}
}while(opc!=5);
}
}
Responder
Italex
24 de Noviembre del 2014
estrellaestrellaestrellaestrellaestrella
Excelente gracias, solo me queda una duda y es que no entendí realmente que significa el valor que arroja el método cantidad, que es lo que mide dentro del árbol?
Responder
25 de Noviembre del 2014
estrellaestrellaestrellaestrellaestrella
Italex, cantidad devuelta el nuemero de nodos en el arbol
Responder
luis perez
18 de Diciembre del 2014
estrellaestrellaestrellaestrellaestrella
mira amigo una pregunta el codigo para hacer el arbol espejo y saber cuantos nodos hojas y cuantos nodos ramos tiene el arbol no lo tienes para poder ver como funciona
Responder
wilmar alfaro
6 de Marzo del 2015
estrellaestrellaestrellaestrellaestrella
Ola alguien me podria pasar un ejemplo para buscar nodos hermanos en un arbol binario de busqueda en java.

Les agradezco demasiado.
Responder
reyes
10 de Marzo del 2015
estrellaestrellaestrellaestrellaestrella
no me sirve el de buscar, marca error
Responder
jose miguel torrez cruz
29 de Mayo del 2015
estrellaestrellaestrellaestrellaestrella
y cuando se realiza arboles por profundidad como funciona este árbol o para que es utilizado este tipo de arboles
Responder
zabdi
16 de Marzo del 2016
estrellaestrellaestrellaestrellaestrella
alguien q me pueda ayudar nesecito hacer un arbol el cual le de una formula
ejemplo
2x+3y-2
y me imprima esos datos en inorden
Responder
compa
19 de Julio del 2016
estrellaestrellaestrellaestrellaestrella
disculpen todos los metodos me funcionan menos el de buscar me sale solo que no existe todo lo que pongo, me podrian ayudar con eso sera que esta malo?
Responder
jefferson
6 de Septiembre del 2016
estrellaestrellaestrellaestrellaestrella
amigo como hago para sumar las hojas en mi arbol
Responder
Francisco
12 de Enero del 2017
estrellaestrellaestrellaestrellaestrella
Al eliminar la raiz no me arrojan todos los valores de los nodos derechos?
Responder
24 de Febrero del 2017
estrellaestrellaestrellaestrellaestrella
No ha dejado ningún comentario
Responder
Leonel
7 de Marzo del 2017
estrellaestrellaestrellaestrellaestrella
Esto te puede ayudar arbol tipo persona: http://adf.ly/1kne9M
arbol tipo entero: http://adf.ly/1kmPVb
Responder
yg
19 de Mayo del 2017
estrellaestrellaestrellaestrellaestrella
sf
Responder
juan
19 de Mayo del 2017
estrellaestrellaestrellaestrellaestrella
como lleno un arbol aleatoriamente??????????
Responder
Paul
20 de Diciembre del 2017
estrellaestrellaestrellaestrellaestrella
podrias crear una lista de valores aleatorio que se inserten en el arbol, se acomodarian según su valor ;) :v
Responder
Carlos Lael Garcia Aguilar
9 de Noviembre del 2017
estrellaestrellaestrellaestrellaestrella
Amigo, si vas a subir algo asegúrate de subirlo bien, o por lo menos completo, por tu culpa perdí una firma y esa la necesitaba para pasar la materia
Responder
LadyBug
18 de Noviembre del 2017
estrellaestrellaestrellaestrellaestrella
¿Y qué culpa tiene él? Si no pudiste pasar la materia ed porque simplemente no te dedicaste lo suficiente. Es el colmo que le eches la culpa a los demás.
Responder
Ada
19 de Noviembre del 2017
estrellaestrellaestrellaestrellaestrella
Solo una acotación:

Según el recorrido en Post Orden
(Nodo Izquierdo - Nodo Derecho - Raíz)

El método en Post Orden debería ser así:

public void posOrder(){
if (!esVacio()) {
raiz.hi.posOrder(); // nodo izquierdo primero
raiz.hd.posOrder(); // nodo derecho
System.out.print( raiz.dato + ", " ); // raiz

}
}
Responder
Imágen de perfil
22 de Febrero del 2018
estrellaestrellaestrellaestrellaestrella
Me interesa el método eliminar.
Ya que estoy trabajando en un árbol binario.
Aunque en mi caso la menor cantidad de texto irá a la izquierda y la mayor cantidad de texto irá a la derecha.
Responder

Comentar la versión: Versión 1

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s2257