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

Arboles binarios de búsquedagráfica de visualizaciones


Java

estrellaestrellaestrellaestrellaestrella(15)
Publicado el 30 de Noviembre del 2012 por jacinto
68.621 visualizaciones desde el 30 de Noviembre del 2012. Una media de 329 por semana
Implementación de arboles binarios de búsqueda.

Versión 1
estrellaestrellaestrellaestrellaestrella(15)

Publicado el 30 de Noviembre del 2012gráfica de visualizaciones de la versión: Versión 1
68.623 visualizaciones desde el 30 de Noviembre del 2012. Una media de 329 por semana
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 (15)

Jonathan Sánchez
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
Jaime Duende
24 de Julio del 2014
estrellaestrellaestrellaestrellaestrella
Tengo problema al implementarlo en Netbeans, me genera el error <No main classes found>
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
05 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
jacinto
07 de Noviembre del 2014
estrellaestrellaestrellaestrellaestrella
Pedro, debes llamarlo con un parametro integer que seria el elemento a eliminar.
Ejemplo: ab.eliminar(4);
Responder
Andrea
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
jacinto
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
06 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
06 de Septiembre del 2016
estrellaestrellaestrellaestrellaestrella
amigo como hago para sumar las hojas en mi arbol
Responder

Comentar la versión: Versión 1

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

http://lwp-l.com/s2257