Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Universidad Cooperativa de Colombia Estructura de datos 2023 ARBOLES EN PROGRAMACION “JAVA” una estructura de datos no lineal que se utiliza para almacenar y organizar datos de manera jerárquica. En un árbol, cada elemento se conoce como un nodo y está conectado a otros nodos a través de enlaces llamados bordes o ramas. En Java, los árboles se pueden implementar utilizando clases y métodos que permiten la creación, modificación y recorrido de la estructura. Una de las implementaciones más comunes es la clase "TreeNode" que se encuentra en la biblioteca de Java. Un ejemplo de uso de árboles en Java podría ser la implementación de un árbol de búsqueda binaria. En este tipo de árbol, el nodo raíz tiene dos hijos, uno a la izquierda y otro a la derecha. Cada hijo a su vez tiene otros dos hijos, y así sucesivamente, creando una estructura en forma de árbol. las características y aplicaciones más comunes de los árboles en Java: Jerarquía: Los árboles son una estructura jerárquica, lo que significa que los nodos se organizan en niveles. El nodo raíz es el nivel superior, y los nodos secundarios se encuentran en niveles subsiguientes. Esta jerarquía se utiliza en muchas aplicaciones, como la organización de archivos y directorios en un sistema operativo. 1. Recorrido: Los árboles se pueden recorrer de diferentes maneras para acceder a los nodos y sus datos. Los recorridos más comunes son el preorden, enorden (o inorder), postorden, y el recorrido por niveles. Cada uno de estos recorridos tiene sus propias ventajas y se utiliza en diferentes aplicaciones. 2. Búsqueda: Los árboles de búsqueda se utilizan para buscar y recuperar datos de manera eficiente. Un árbol de búsqueda binaria, como el ejemplo que te mostré, tiene la propiedad de que cada nodo a la izquierda de un nodo dado tiene un valor menor, mientras que cada nodo a la derecha tiene un valor mayor. Esto permite realizar búsquedas en tiempo logarítmico, lo que significa que el tiempo de búsqueda aumenta lentamente a medida que el árbol crece. 3. Ordenamiento: Los árboles también se utilizan para ordenar datos. Un árbol de búsqueda binaria se puede utilizar para ordenar una lista de elementos, insertando cada elemento en el árbol y luego recorriendo el árbol en orden para recuperar los elementos ordenados. Este algoritmo de ordenamiento se llama "ordenamiento por árbol". 4. Reducción de complejidad: Los árboles se utilizan para reducir la complejidad de los algoritmos. Por ejemplo, el algoritmo de compresión de Huffman utiliza un árbol para codificar y comprimir datos de manera eficiente. 5. Representación de estructuras de datos complejas: Los árboles se utilizan para representar estructuras de datos complejas, como los árboles genealógicos o las estructuras de una página web. En estos casos, cada nodo representa una página o un elemento, y las ramas representan los enlaces entre ellos. 6. En resumen, los árboles son una estructura de datos muy poderosa y versátil que se utiliza en una amplia variedad de aplicaciones en programación. En Java, los árboles se pueden implementar utilizando diferentes clases y métodos, dependiendo de las necesidades del programador y la aplicación en cuestión. Ya sea para organizar datos, buscar información o reducir la complejidad de los algoritmos, los árboles son una herramienta valiosa para cualquier programador. EJEMPLO DE SUSTENTACION arbol+Proyecto Final.zip arbol/build.xml Builds, tests, and runs the project arbol. arbol/build/classes/.netbeans_automatic_build arbol/build/classes/.netbeans_update_resources arbol/build/classes/ArbolBinario.class arbol/build/classes/MenuArbolBinario.class arbol/build/classes/Nodo.class arbol/manifest.mf Manifest-Version: 1.0 X-COMMENT: Main-Class will be added automatically by build arbol/nbproject/build-impl.xml Must set src.dir Must set test.src.dir Must set build.dir Must set dist.dir Must set build.classes.dir Must set dist.javadoc.dir Must set build.test.classes.dir Must set build.test.results.dir Must set build.classes.excludes Must set dist.jarMust set javac.includes No tests executed. Must set JVM to use for profiling in profiler.info.jvm Must set profiler agent JVM arguments in profiler.info.jvmargs.agentMust select some files in the IDE or set javac.includes To run this application from the command line without Ant, try: java -jar "${dist.jar.resolved}" Must select one file in the IDE or set run.class Must select one file in the IDE or set run.class Must select one file in the IDE or set debug.class Must select one file in the IDE or set debug.class Must set fix.includes This target only works when run from inside the NetBeans IDE. Must select one file in the IDE or set profile.class This target only works when run from inside the NetBeans IDE. This target only works when run from inside the NetBeans IDE. This target only works when run from inside the NetBeans IDE. Must select one file in the IDE or set run.class Must select some files in the IDE or set test.includes Must select one file in the IDE or set run.class Must select one file in the IDE or set applet.url Must select some files in the IDE or set javac.includes Some tests failed; see details above. Must select some files in the IDE or set test.includes Some tests failed; see details above. Must select some files in the IDE or set test.class Must select some method in the IDE or set test.method Some tests failed; see details above. Must select one file in the IDE or set test.class Must select one file in the IDE or set test.class Must select some method in the IDE or set test.method Must select one file in the IDE or set applet.url Must select one file in the IDE or set applet.url arbol/nbproject/genfiles.properties build.xml.data.CRC32=39fcb5fb build.xml.script.CRC32=3557d898 build.xml.stylesheet.CRC32=f85dc8f2@1.106.0.48 # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. nbproject/build-impl.xml.data.CRC32=39fcb5fb nbproject/build-impl.xml.script.CRC32=b9eb6d99 nbproject/build-impl.xml.stylesheet.CRC32=12e0a6c2@1.106.0.48arbol/nbproject/private/private.properties compile.on.save=true user.properties.file=C:\\Users\\Nabil\\AppData\\Roaming\\NetBeans\\17\\build.properties arbol/nbproject/project.properties annotation.processing.enabled=true annotation.processing.enabled.in.editor=false annotation.processing.processor.options= annotation.processing.processors.list= annotation.processing.run.all.processors=true annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output build.classes.dir=${build.dir}/classes build.classes.excludes=**/*.java,**/*.form # This directory is removed when the project is cleaned: build.dir=build build.generated.dir=${build.dir}/generated build.generated.sources.dir=${build.dir}/generated-sources # Only compile against the classpath explicitly listed here: build.sysclasspath=ignore build.test.classes.dir=${build.dir}/test/classes build.test.results.dir=${build.dir}/test/results # Uncomment to specify the preferred debugger connection transport: #debug.transport=dt_socket debug.classpath=\ ${run.classpath} debug.modulepath=\ ${run.modulepath} debug.test.classpath=\ ${run.test.classpath} debug.test.modulepath=\ ${run.test.modulepath} # Files in build.classes.dir which should be excluded from distribution jar dist.archive.excludes= # This directory is removed when the project is cleaned: dist.dir=dist dist.jar=${dist.dir}/arbol.jar dist.javadoc.dir=${dist.dir}/javadoc dist.jlink.dir=${dist.dir}/jlink dist.jlink.output=${dist.jlink.dir}/arbol excludes= includes=** jar.compress=false javac.classpath= # Space-separated list of extra javac options javac.compilerargs= javac.deprecation=false javac.external.vm=true javac.modulepath= javac.processormodulepath= javac.processorpath=\ ${javac.classpath} javac.source=17 javac.target=17 javac.test.classpath=\ ${javac.classpath}:\ ${build.classes.dir} javac.test.modulepath=\ ${javac.modulepath} javac.test.processorpath=\ ${javac.test.classpath} javadoc.additionalparam= javadoc.author=false javadoc.encoding=${source.encoding} javadoc.html5=false javadoc.noindex=false javadoc.nonavbar=false javadoc.notree=false javadoc.private=false javadoc.splitindex=true javadoc.use=true javadoc.version=false javadoc.windowtitle= # The jlink additional root modules to resolve jlink.additionalmodules= # The jlink additional command line parameters jlink.additionalparam= jlink.launcher=true jlink.launcher.name=arbol main.class=MenuArbolBinario manifest.file=manifest.mf meta.inf.dir=${src.dir}/META-INF mkdist.disabled=false platform.active=default_platform run.classpath=\ ${javac.classpath}:\ ${build.classes.dir} # Space-separated list of JVM arguments used when running the project. # You may also define separate properties like run-sys-prop.name=value instead of -Dname=value. # To set system properties for unit tests define test-sys-prop.name=value: run.jvmargs= run.modulepath=\ ${javac.modulepath} run.test.classpath=\ ${javac.test.classpath}:\ ${build.test.classes.dir} run.test.modulepath=\ ${javac.test.modulepath} source.encoding=UTF-8 src.dir=src test.src.dir=test arbol/nbproject/project.xml org.netbeans.modules.java.j2seproject arbol arbol/src/ArbolBinario.java arbol/src/ArbolBinario.java /* * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template */ /** * * @author Nabil */ public class ArbolBinario { Nodo raiz; public ArbolBinario() { raiz = null; } public void insertar(int valor) { raiz = insertarRec(raiz, valor); } private Nodo insertarRec(Nodo raiz, int valor) { if (raiz == null) { raiz = new Nodo(valor); return raiz; } if (valor < raiz.valor) raiz.izquierdo = insertarRec(raiz.izquierdo, valor); else if (valor > raiz.valor) raiz.derecho = insertarRec(raiz.derecho, valor); return raiz; } public void mostrar() { mostrarRec(raiz); } private void mostrarRec(Nodo raiz) { if (raiz != null) { mostrarRec(raiz.izquierdo); System.out.print(raiz.valor + " "); mostrarRec(raiz.derecho); } } public void eliminar(int valor) { raiz = eliminarRec(raiz, valor); } private Nodo eliminarRec(Nodo raiz, int valor) { if (raiz == null) return raiz; if (valor < raiz.valor) raiz.izquierdo = eliminarRec(raiz.izquierdo, valor); else if (valor > raiz.valor) raiz.derecho = eliminarRec(raiz.derecho, valor); else { if (raiz.izquierdo == null) return raiz.derecho; else if (raiz.derecho == null) return raiz.izquierdo; raiz.valor = encontrarMinimo(raiz.derecho); raiz.derecho = eliminarRec(raiz.derecho, raiz.valor); } return raiz; } private int encontrarMinimo(Nodo raiz) { int minimo = raiz.valor; while (raiz.izquierdo != null) { minimo = raiz.izquierdo.valor; raiz = raiz.izquierdo; } return minimo; } } arbol/src/MenuArbolBinario.java arbol/src/MenuArbolBinario.java import java.util.Scanner; /* * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Main.java to edit this template */ /** * * @author Nabil */ public class MenuArbolBinario { /** * @param args the command line arguments */ public static void main(String[] args) { Scanner sc = new Scanner(System.in); ArbolBinario arbol = new ArbolBinario(); int opcion = 0; while (opcion != 4) { System.out.println("=== Menú del Árbol Binario ==="); System.out.println("1. Insertar valor"); System.out.println("2. Mostrar valores"); System.out.println("3. Eliminar valor"); System.out.println("4. Salir"); System.out.print("Ingrese su opción: "); opcion = sc.nextInt(); switch (opcion) { case 1: System.out.print("Ingrese el valor a insertar: "); int valorInsertar = sc.nextInt(); arbol.insertar(valorInsertar); System.out.println("Valor insertado correctamente."); break; case 2: System.out.print("Valores del árbol: "); arbol.mostrar(); System.out.println(); break; case 3: System.out.print("Ingrese el valor a eliminar: "); int valorEliminar = sc.nextInt(); arbol.eliminar(valorEliminar); System.out.println("Valor eliminado correctamente."); break; case 4: System.out.println("Saliendo del programa..."); break; default: System.out.println("Opción inválida. Por favor, ingrese una opción válida."); break; } System.out.println(); } sc.close(); } } arbol/src/Nodo.java arbol/src/Nodo.java /* * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txtto change this license * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template */ /** * * @author Nabil */ public class Nodo { int valor; Nodo izquierdo; Nodo derecho; public Nodo(int valor) { this.valor = valor; izquierdo = null; derecho = null; } }
Compartir