El recorrido de árboles refiere al proceso de visitar de una manera sistemática, exactamente una vez, cada nodo en una estructura de datos de árbol (examinando y/o actualizando los datos en los nodos).
Preorden: (raíz, izquierdo, derecho). Para recorrer un árbol binario no vacío en preorden, hay que realizar las siguientes operaciones recursivamente en cada nodo, comenzando con el nodo de raíz:
- Visite la raíz
- Atraviese el sub-árbol izquierdo
- Atraviese el sub-árbol derecho
- Atraviese el sub-árbol izquierdo
- Visite la raíz
- Atraviese el sub-árbol derecho
- Atraviese el sub-árbol izquierdo
- Atraviese el sub-árbol derecho
- Visite la raíz
- En preorden, la raíz se recorre antes que los recorridos de los subárboles izquierdo y derecho
- En inorden, la raíz se recorre entre los recorridos de los árboles izquierdo y derecho, y
- En postorden, la raíz se recorre después de los recorridos por el subárbol izquierdo y el derecho
public class NodoArbol
{
//miembros de acceso
NodoArbol nodoizquierdo;
int datos;
NodoArbol nododerecho;
//iniciar dato y hacer de este nodo un nodo hoja
public NodoArbol(int datosNodo)
{
datos = datosNodo;
nodoizquierdo = nododerecho = null; //el nodo no tiene hijos
}
//buscar punto de insercion e inserter nodo nuevo
public synchronized void insertar(int valorInsertar)
{
//insertar en subarbol izquierdo
if(valorInsertar < datos)
{
//insertar en subarbol izquierdo
if(nodoizquierdo == null)
nodoizquierdo = new NodoArbol(valorInsertar);
else //continua recorriendo subarbol izquierdo
nodoizquierdo.insertar(valorInsertar);
}
//insertar nodo derecho
else if(valorInsertar > datos)
{
//insertar nuevo nodoArbol
if(nododerecho == null)
nododerecho = new NodoArbol(valorInsertar);
else
nododerecho.insertar(valorInsertar);
}
} // fin del metodo insertar
}
class Arbol
{
private NodoArbol raiz;
//construir un arbol vacio
public Arbol()
{
raiz = null;
}
//insertar un nuevo ndo en el arbol de busqueda binaria
public synchronized void insertarNodo(int valorInsertar)
{
if(raiz == null)
raiz = new NodoArbol(valorInsertar); //crea nodo raiz
else
raiz.insertar(valorInsertar); //llama al metodo insertar
}
// EMPIEZA EL RECORRIDO EN PREORDEN
public synchronized void recorridoPreorden()
{
ayudantePreorden(raiz);
}
//meoto recursivo para recorrido en preorden
private void ayudantePreorden(NodoArbol nodo)
{
if(nodo == null)
return;
System.out.print(nodo.datos + " "); //mostrar datos del nodo
ayudantePreorden(nodo.nodoizquierdo); //recorre subarbol izquierdo
ayudantePreorden(nodo.nododerecho); //recorre subarbol derecho
}
//EMPEZAR RECORRIDO INORDEN
public synchronized void recorridoInorden()
{
ayudanteInorden(raiz);
}
//meoto recursivo para recorrido inorden
private void ayudanteInorden( NodoArbol nodo)
{
if(nodo == null)
return;
ayudanteInorden(nodo.nodoizquierdo);
System.out.print(nodo.datos + " ");
ayudanteInorden(nodo.nododerecho);
}
//EMPEZAR RECORRIDO PORORDEN
public synchronized void recorridoPosorden()
{
ayudantePosorden(raiz);
}
//meotod recursivo para recorrido posorden
private void ayudantePosorden(NodoArbol nodo)
{
if( nodo == null )
return;
ayudantePosorden(nodo.nodoizquierdo);
ayudantePosorden(nodo.nododerecho);
System.out.print(nodo.datos + " ");
}
}
Clase controladora:
import javax.swing.JOptionPane;
public class PruebaArbol
{
public static void main(String args [])
{
Arbol arbol = new Arbol();
int valor;
String Dato;
System.out.println("Insertando los siguientes valores: ");
Dato = JOptionPane.showInputDialog("Inserta el numero de nodos que desea ingresar");
int n = Integer.parseInt(Dato);
for(int i = 1; i <= n; i++ )
{
Dato = JOptionPane.showInputDialog("Dame el " + i + " valor para colocar en el Arbol");
valor = Integer.parseInt(Dato);
System.out.print(valor + " ");
arbol.insertarNodo(valor);
}
System.out.println("\n\nRecorrido Preorden");
arbol.recorridoPreorden();
System.out.println("\n\nRecorrido Inorden");
arbol.recorridoInorden();
System.out.println("\n\nRecorrido Postorden");
arbol.recorridoPosorden();
}
}
Output:Insertando los siguientes valores:
35 50 8 12 69 84 25 75 93 16
Recorrido Preorden
35 8 12 25 16 50 69 84 75 93
Recorrido Inorden
8 12 16 25 35 50 69 75 84 93
Recorrido Postorden
16 25 12 8 75 93 84 69 50 35
no has echo un video donde expliques el programa seria bueno
ResponderEliminarmuy bueno
ResponderEliminarQue bueno seria un tutorial, pero muchas gracias por el aporte.
ResponderEliminarno me ayudo de muxo lo hice para un examen y no me salio
ResponderEliminarcomo le tengo que hacer para que en vez de numeros sean letras??
ResponderEliminartienes errores en el recorrido de los metodos
ResponderEliminarsolo es in-orden no es como deberia hacer solo intenta arreglar el in-orden
Eliminar¡excelente! me ha sido de gran utilidad. Muchas gracias
ResponderEliminarnecesito saber q es un su arbol
ResponderEliminarError: no se ha encontrado el método principal en la clase nodoarbol.NodoArbol, defina el método principal del siguiente modo:\n public static void main(String[] args)\nde lo contrario, se deberá ampliar una clase de aplicación JavaFX javafx.application.Application
ResponderEliminarJava Result: 1
BUILD SUCCESSFUL (total time: 3 seconds) AYUDA COMO LE HAGO?
Muchas gracias me ha servido muchisimo lo corri en netbeans y me sirvio es sencillo, pero sirve para entender el recorrido de elementos en arboles, pulgar arriba¡¡¡¡¡
ResponderEliminarArbol arbol = new Arbol(); no se por que me da error alguno sabe en neatbeans lo que marca error es la palabra Arbol
ResponderEliminaruna pregunta para sacar los datos de la derecha y los datos de la izquierda en una lista como podria ser...podrias ayudarme?
ResponderEliminarY si lo quiero hacer gráfico, me pueden ayudar, o se, con jFrame en Netbeans. :D
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarMUCHAS GRACIAS!!! MUY EXPLICATIVO, NOS AYUDO MUCHO!! :3
ResponderEliminar