Logo Studenta

ARBOLES EN PROGRAMACION Y EJEMPLO CODIGO

¡Estudia con miles de materiales!

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;
    }
    
}

Continuar navegando