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