Sunteți pe pagina 1din 17

INTEGRANTES:

- ZARETH GISELL HUAMAN AMACHE


- LUIS EDUARDO HUARAYA RAMIREZ

TAD ARBOL EN JAVA


DEFINICION:
Un árbol se define como una colección de nodos donde cada uno además de
almacenar información, guarda las direcciones de sus sucesores.

Los árboles representan las estructuras no-lineales y dinámicas de datos


más importantes en computación.
OPERACIONES BASICAS CON TAD ARBOL:
Inicializar: Recibe un árbol A y lo inicializa para su trabajo normal. Insertar: Añade un
elemento por el final de la cola.
Eliminar: Recibe una un árbol A y lo libera completamente.
REPRESENTACION DE TAD ARBOL:

Recorrido en preorden:
 Visitar la raíz
 Recorrer el subárbol izquierdo
 Recorrer el subárbol derecho
Recorrido en inorden:
 Recorrer el subárbol izquierdo
 Visitar la raíz
 Recorrer el subárbol derecho
Recorrido en postorden:
 Recorrer el subárbol izquierdo
 Recorrer el subárbol derecho
 Visitar la raíz
EJERCICIO:
o Código de TAD ARBOL:
1. Creamos clases:

2. NodoArbol

/*

* To change this license header, choose License Headers in Project Properties.

* To change this template file, choose Tools | Templates

* and open the template in the editor.

*/

package tadarbol;

/**

* @author HUAMAN AMACHE Y HUARAYA RAMIREZ

*/

public class NodoArbol {

//declarar variables
int dato;

NodoArbol hijoIzquierdo,hijoDerecho;

String nombre;

public NodoArbol(int d,String nom) {

this.dato=d;

this.nombre=nom;

this.hijoDerecho=null;

this.hijoIzquierdo=null;

public String toString() {

return nombre + "Su dato es"+ dato;

3. ArbolBinario

package tadarbol;

public class ArbolBinario {

NodoArbol raiz;

public ArbolBinario() {

raiz=null;

//metodo para insertar nodo en el Arbol


public void agregarNodo(int d,String nom) {

NodoArbol nuevo = new NodoArbol(d,nom);

if(raiz==null) {

raiz=nuevo;

}else {

NodoArbol auxiliar=raiz;

NodoArbol padre;

while(true) {

padre=auxiliar;

if(d<auxiliar.dato) {

auxiliar=auxiliar.hijoIzquierdo;

if(auxiliar==null) {

padre.hijoIzquierdo=nuevo;

return;

}else {

auxiliar=auxiliar.hijoDerecho;

if(auxiliar==null) {

padre.hijoDerecho=nuevo;

return;

//metodo para saber cuando el arbol esta vacio

public boolean estaVacio() {

return raiz==null;

//metodo para recorrer el arbol en orden

public void inOrden(NodoArbol r) {

if(r!=null) {

inOrden(r.hijoIzquierdo);
System.out.println(r.dato+",");

inOrden(r.hijoDerecho);

//metodo para recorer en pre orden

public void preOrden(NodoArbol r) {

if(r!=null) {

preOrden(r.hijoIzquierdo);

System.out.print(r.dato+",");

preOrden(r.hijoDerecho);

//metodo para recorer en pre orden

public void postOrden(NodoArbol r) {

if(r!=null) {

postOrden(r.hijoIzquierdo);

System.out.print(r.dato+",");

postOrden(r.hijoDerecho);

//metodo para buscar un nodo en arbol

public NodoArbol buscarNodo(int d) {

NodoArbol aux=raiz;

while (aux.dato!=d) {

if(d<aux.dato) {

aux=aux.hijoIzquierdo;

}else {

aux=aux.hijoDerecho;

if(aux==null) {

return null;

}
return aux;

//metodo para eliminar un nodo del arbol

public boolean eliminar(int d) {

NodoArbol auxiliar=raiz;

NodoArbol padre=raiz;

boolean esHijoIzq=true;

while(auxiliar.dato!=d) {

padre=auxiliar;

if(d<auxiliar.dato) {

esHijoIzq=true;

auxiliar=auxiliar.hijoIzquierdo;

}else {

esHijoIzq=false;

auxiliar=auxiliar.hijoDerecho;

if(auxiliar==null) {

return false;

}//fin del while

if(auxiliar.hijoIzquierdo==null && auxiliar.hijoDerecho==null) {

if(auxiliar==raiz) {

raiz=null;

}else if (esHijoIzq) {

padre.hijoIzquierdo=null;

}else {

padre.hijoDerecho=null;

}else if(auxiliar.hijoDerecho==null) {

if(auxiliar==raiz) {

raiz=auxiliar.hijoIzquierdo;
}else if (esHijoIzq) {

padre.hijoIzquierdo=auxiliar.hijoIzquierdo;

}else {

padre.hijoDerecho=auxiliar.hijoIzquierdo;

}else if(auxiliar.hijoIzquierdo==null) {

if(auxiliar==raiz) {

raiz=auxiliar.hijoDerecho;

}else if (esHijoIzq) {

padre.hijoIzquierdo=auxiliar.hijoDerecho;

}else {

padre.hijoDerecho=auxiliar.hijoIzquierdo;

}else {

NodoArbol reemplazo=obtenerNodoReemplazo(auxiliar);

if(auxiliar==raiz) {

raiz=reemplazo;

}else if(esHijoIzq) {

padre.hijoIzquierdo=reemplazo;

}else {

padre.hijoDerecho=reemplazo;

reemplazo.hijoIzquierdo=auxiliar.hijoIzquierdo;

return true;

//metodo encargado de devolvernos el nodo reemplazo

public NodoArbol obtenerNodoReemplazo(NodoArbol nodoReemp) {

NodoArbol reemplazarPadre=nodoReemp;

NodoArbol reemplazo=nodoReemp;

NodoArbol auxiliar=nodoReemp.hijoDerecho;

while(auxiliar!=null) {

reemplazarPadre=reemplazo;
reemplazo=auxiliar;

auxiliar=auxiliar.hijoIzquierdo;

if(reemplazo!=nodoReemp.hijoDerecho){

reemplazarPadre.hijoIzquierdo=reemplazo.hijoDerecho;

reemplazo.hijoDerecho=nodoReemp.hijoDerecho;

System.out.println("El nodo reemplazo es "+reemplazo);

return reemplazo;

}
4. TadArbol

package tadarbol;

import javax.swing.JOptionPane;
public class TadArbol {

public static void main(String[] args) {

// TODO code application logic here

int opcion=0,elemento;

String nombre;

ArbolBinario arbolito = new ArbolBinario();

do {

try {

opcion = Integer.parseInt(JOptionPane.showInputDialog(null,

"1.Agregar un nodo\n"

+"2.Recorrer el arbol inOrden\n"

+"3.Recorrer el arbol en preOrden\n"

+"4.Recorrer el arbol en postOrden\n"

+"5.Buscar nodo en el arbol\n"

+"6.Eliminar un nodo del arbol\n"

+"7.Salir\n"

+"Elige una opcion","Arboles Binarios",

JOptionPane.QUESTION_MESSAGE));

switch(opcion) {

case 1:

elemento = Integer.parseInt(JOptionPane.showInputDialog(null,"Ingresa el numero


del nodo","Agregando Nodo",JOptionPane.QUESTION_MESSAGE));

nombre = JOptionPane.showInputDialog("null,Ingresa el Nombre del


Nodo..",JOptionPane.QUESTION_MESSAGE);

arbolito.agregarNodo(elemento, nombre);

break;

case 2:

if(!arbolito.estaVacio()) {

System.out.println();

arbolito.inOrden(arbolito.raiz);

}else {

JOptionPane.showConfirmDialog(null, "El arbol esta vacio",

"!llenar",JOptionPane.INFORMATION_MESSAGE);

break;
case 3:

if(!arbolito.estaVacio()) {

System.out.println();

arbolito.preOrden(arbolito.raiz);

}else {

JOptionPane.showConfirmDialog(null, "El arbol esta vacio",

"!llenar",JOptionPane.INFORMATION_MESSAGE);

break;

case 4:

if(!arbolito.estaVacio()) {

System.out.println();

arbolito.postOrden(arbolito.raiz);

}else {

JOptionPane.showConfirmDialog(null, "El arbol esta vacio",

"!llenar",JOptionPane.INFORMATION_MESSAGE);

break;

case 5:

if(!arbolito.estaVacio()) {

elemento = Integer.parseInt(JOptionPane.showInputDialog(null,"ingresa el numero


del nodo buscado ","buscando Nodo",JOptionPane.QUESTION_MESSAGE));

arbolito.buscarNodo(elemento);

if(arbolito.buscarNodo(elemento)==null) {

JOptionPane.showConfirmDialog(null, "El nono no se encuentra en el arbol",

"!nodo no localizado¡",JOptionPane.INFORMATION_MESSAGE);

}else {

System.out.println("nodo encontrado");

}else {

JOptionPane.showConfirmDialog(null, "El arbol esta vacio",

"!llenar",JOptionPane.INFORMATION_MESSAGE);

break;
case 6:

if(!arbolito.estaVacio()) {

elemento = Integer.parseInt(JOptionPane.showInputDialog(null,"ingresa el numero


a eliminar ",

"eliminando nodo",JOptionPane.QUESTION_MESSAGE));

arbolito.buscarNodo(elemento);

if(arbolito.eliminar(elemento)==false) {

JOptionPane.showConfirmDialog(null, "El nono no se encuentra en el arbol",

"!nodo no localizado¡",JOptionPane.INFORMATION_MESSAGE);

}else {

JOptionPane.showConfirmDialog(null, "el nodo a sido eliminado ",

"!nodo eliminado¡",JOptionPane.INFORMATION_MESSAGE);

}else {

JOptionPane.showConfirmDialog(null, "El arbol esta vacio",

"!llenar",JOptionPane.INFORMATION_MESSAGE);

break;

case 7:

JOptionPane.showConfirmDialog(null, "Aplicacion finalizada",

"fin",JOptionPane.INFORMATION_MESSAGE);

default:

JOptionPane.showConfirmDialog(null, "Opcion incorrecta",

"...",JOptionPane.INFORMATION_MESSAGE);

}catch(NumberFormatException n) {

JOptionPane.showMessageDialog(null,"Error "+n.getMessage());

} while (opcion!=7);

}
5. Comprobamos:

S-ar putea să vă placă și