• Lenguaje

    Java

  • Descripción

    Implementa la estructura de datos de tipo árbol binario.
    Inserta y elimina cadenas al árbol.
    Muestra el recorrido en preorden, inorden y postorden.

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
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.util.Scanner;

public class Arbol {

    private Arbol izq = null, der = null;
    private String cadena;

    public static PrintStream out;

    private Arbol() {}
   
    private Arbol(String cadena) {
        this.cadena = cadena;
    }

    public static Arbol insertar(Arbol nodo, String cadena) {
        if (nodo == null)
            nodo = new Arbol(cadena);
        else if (cadena.compareTo(nodo.cadena) < 0)
            nodo.izq = insertar(nodo.izq, cadena);
        else
            nodo.der = insertar(nodo.der, cadena);
        return nodo;
    }

    public static Arbol quitar(Arbol nodo, String cadena) {
        if (nodo != null) {
            if (cadena.equals(nodo.cadena)) {
                Arbol pivote;
                if (nodo.izq == null)
                    pivote = nodo.der;
                else if (nodo.der == null)
                    pivote = nodo.izq;
                else {
                    for (pivote = nodo.izq; pivote.der != null; pivote = pivote.der);
                    pivote.der = nodo.der;
                    pivote = nodo.izq;
                }
                nodo = pivote;
            } else if (cadena.compareTo(nodo.cadena) < 0)
                nodo.izq = quitar(nodo.izq, cadena);
            else
                nodo.der = quitar(nodo.der, cadena);
        }
        return nodo;
    }

    public static void preorden(Arbol nodo) {
        if (nodo != null) {
            out.println(nodo.cadena);
            preorden(nodo.izq);
            preorden(nodo.der);
        }
    }

    public static void inorden(Arbol nodo) {
        if (nodo != null) {
            inorden(nodo.izq);
            out.println(nodo.cadena);
            inorden(nodo.der);
        }
    }

    public static void postorden(Arbol nodo) {
        if (nodo != null) {
            postorden(nodo.izq);
            postorden(nodo.der);
            out.println(nodo.cadena);
        }
    }

    public static void main(String[] args) throws UnsupportedEncodingException {
        Arbol raiz = null;
        char opcion;
        String cadena, linea;
        Scanner teclado;
        if(System.getProperties().get("os.name").equals("Linux") || System.console()==null) {
            teclado = new Scanner(System.in);
            out = System.out;
        } else {
            teclado = new Scanner(System.in, "CP850");
            out =  new PrintStream(System.out, true, "CP850");
        }
        do {
            out.print(
                "MEN\u00DA\n" +
                "1.- Insertar cadena\n" +
                "2.- Quitar cadena\n" +
                "3.- Listado en preorden\n" +
                "4.- Listado en inorden\n" +
                "5.- Listado en postorden\n" +
                "6.- Salir\n\n" +
                "Seleccione una opci\u00F3n: ");
            do {
                linea = teclado.nextLine();
            } while (linea.length() != 1 || linea.charAt(0) < '1' || linea.charAt(0) > '6');
            opcion = linea.charAt(0);
            out.println();
            if (raiz == null && opcion != '1' && opcion != '6')
                out.println("El \u00E1rbol est\u00E1 vac\u00EDo.");
            else
                switch (opcion) {
                    case '1':
                        out.print("Ingrese el cadena a insertar: ");
                        cadena = teclado.nextLine();
                        raiz = Arbol.insertar(raiz, cadena);
                        out.println("\nCadena agregada correctamente.");
                        break;
                    case '2':
                        out.print("Ingrese el cadena a quitar: ");
                        cadena = teclado.nextLine();
                        raiz = Arbol.quitar(raiz, cadena);
                        out.println("\nCadena borrada correctamente.");
                        break;
                    case '3': Arbol.preorden (raiz); break;
                    case '4': Arbol.inorden  (raiz); break;
                    case '5': Arbol.postorden(raiz); break;
                }
            if (opcion != '6') {
                out.print("\nPresione <ENTER> para continuar . . . ");
                teclado.nextLine();
                out.println("\n\n\n\n\n\n\n\n");
            }
        } while (opcion != '6');
    }

}