You are on page 1of 7

Apartado 13.

3, clase ÁrbolBinario
package arbolBinario; public class ArbolBinario { protected Nodo raiz; public ArbolBinario() { raiz = null; } public ArbolBinario(Nodo raiz) { this.raiz = raiz; } public Nodo raizArbol() { return raiz; } public boolean esVacio() { return raiz == null; } public static Nodo nuevoArbol( Nodo ramaIzqda, Object dato, Nodo ramaDrcha) { return new Nodo(ramaIzqda, dato, ramaDrcha); } public static void preorden(Nodo r) { if (r != null) { r.visitar(); preorden (r.subarbolIzdo()); preorden (r.subarbolDcho()); } } // Recorrido de un árbol binario en inorden public static void inorden(Nodo r) { if (r != null) { inorden (r.subarbolIzdo()); r.visitar(); inorden (r.subarbolDcho()); } } // Recorrido de un árbol binario en postorden public static void postorden(Nodo r) { if (r != null) { postorden (r.subarbolIzdo()); postorden (r.subarbolDcho()); r.visitar(); } } public static int altura(Nodo raiz) { if (raiz == null) return 0 ;

raiz. valor = 0.subarbolDcho()).subarbolIzdo()). Character nr. if (raiz != null) // no está vacío { nr = (Character) raiz. else { x = evaluar(raiz. operandos). } public static ArbolBinario copiaArbol(Nodo raiz) { Nodo raizCopia. } return new ArbolBinario(raizCopia). . raizCopia = new Nodo(izdoCopia. else if (altura(raiz. if (ch >= 'A' && ch <= 'Z') return operandos[ch . operandos).subarbolIzdo()) && arbolLleno(raiz. else return 1 + numNodos(raiz.valorNodo(). dchoCopia.subarbolIzdo()).subarbolIzdo()) + numNodos(raiz.raizArbol(). double[] operandos) throws Exception { double x. ch = nr. int alturaDr = altura (raiz. if (raiz == null) raizCopia = null. izdoCopia = copiaArbol(raiz. } public static double evaluar(Nodo raiz. } } public static boolean arbolLleno(Nodo raiz) { if (raiz == null) return true.'A']. dchoCopia = copiaArbol(raiz.valorNodo().else { int alturaIz = altura (raiz.charValue(). else { ArbolBinario izdoCopia.subarbolDcho())) return false.subarbolIzdo(). valor.subarbolIzdo())!= altura(raiz.subarbolDcho()).0.subarbolDcho(). } public static int numNodos(Nodo raiz) { if (raiz == null) return 0. dchoCopia.subarbolDcho()). return arbolLleno(raiz. else return alturaDr + 1. y = evaluar(raiz. y.raizArbol()). char ch . if (alturaIz > alturaDr) return alturaIz + 1.subarbolDcho()).

case '/': if (y != 0) valor = x/y. y). } } } } } return valor. case '^': valor = Math. . else throw new Exception("Error: división por 0"). case '*': valor = x * y. break. break.y. break.switch (ch) { case '+': valor = x + y. case '-': valor = x . break.pow(x.

else if (dato.subarbolIzdo()) + numNodos(raiz. } .7 public static int numNodos(Nodo raiz) { if (raiz == null) return 0. else return 1 + numNodos(raiz. } return raizSub. else raizSub = raizSub.valorNodo())) encontrado = true. } EJEMPLO 13.subarbolDcho()). while (!encontrado && raizSub != null) { if (dato.EJEMPLO 13.igualQue(raizSub.subarbolDcho(). Nodo raizSub = raiz. dato = (Comparador) buscado.11 public Nodo buscarIterativo (Object buscado) { Comparador dato.valorNodo())) raizSub = raizSub. boolean encontrado = false.menorQue(raizSub.subarbolIzdo().

numMat.*. return numMat > p2. return numMat <= p2. 0). } public boolean mayorQue(Object op2) { Estudiante p2 = (Estudiante) op2.numMat.numMat. } public boolean menorQue(Object op2) { Estudiante p2 = (Estudiante) op2. return numMat == p2. } public String toString() { if (nombre != null) return nombre + numMat. import arbolBinarioOrdenado.EJERCICIO 13. } } . } public boolean igualQue(Object op2) { Estudiante p2 = (Estudiante) op2. import arbolBinario. } public boolean mayorIgualQue(Object op2) { Estudiante p2 = (Estudiante) op2.*. int mat) { nombre = n. } public Estudiante() { this(null. numMat = mat. return numMat < p2. return numMat >= p2.numMat.io. else return "No asignado". } public boolean menorIgualQue(Object op2) { Estudiante p2 = (Estudiante) op2.numMat. String nombre. public Estudiante(String n.2 import java. class Estudiante implements Comparador { int numMat.*.

public class ArbolEstudiante { public static void main(String [] a) { ArbolBinarioBusqueda ab = new ArbolBinarioBusqueda().println(e).eliminar(new Estudiante(null. try { // Se crea el árbol de búsqueda do{ System.print("\n\tEstudiantes \n"). ab. nom = entrada.print("Nombre: ").parseInt(entrada. BufferedReader entrada = new BufferedReader( new InputStreamReader(System. } catch (Exception e) { System. } } }while (nm != 3). Estudiante el. System.in)).out.out. } catch (Exception er) { System.readLine().readLine()). Eliminar un estudiante\n").insertar(el).out.out.print(" 1. } }while (nm != 0).out.out.parseInt(entrada. Mostrar el árbol\n").println("Error en el proceso del arbol: " + er).parseInt(entrada. System. } else if (nm == 2) { int nmt.print(" 2.readLine()).print ("Matricula: "). // Operaciones con el arbol do { System. if (nm > 0) { System.out. Salir\n "). nmt = Integer.out. int nm. nm = Integer.readLine()). do nm = Integer.raizArbol()). System. nm).print(" 3.print("Numero de matricula(0 -> Fin): "). el = new Estudiante(nom.out. if (nm == 1) { System. visualizar(ab. String nom. } } static void visualizar (Nodo r) { if (r != null) { . try { ab. while(nm < 1 || nm > 3).nmt)).

out.valorNodo())) encontrado = true.subarbolDcho()). while (!encontrado && raizSub != null) { if (dato. } } } EJERCICIO 13. else if (dato.11 public Nodo buscarIterativo (Object buscado) { Comparador dato.visualizar(r.subarbolDcho().subarbolIzdo()).valorNodo()).7 public static int numNodos(Nodo raiz) { if (raiz == null) return 0. boolean encontrado = false.igualQue(raizSub.subarbolIzdo().subarbolIzdo()) + numNodos(raiz. } return raizSub. else return 1 + numNodos(raiz.subarbolDcho()). } EJERCICIO 13. else raizSub = raizSub.println(r. visualizar(r.menorQue(raizSub. System. Nodo raizSub = raiz. } .valorNodo())) raizSub = raizSub. dato = (Comparador) buscado.