INGENIERIA EN SISTEMAS COMPUTACIONALES
UNIR MEXICO
Ingeniería en sistemas computacionales
Actividad no2
Implementación de arbol
Nombre del alumno
Gerónimo Amador Ordoñez
asignatura
Estructuras de datos
profesora
Vanessa del Rosario Alcalá Ramírez
Introducción
un árbol binario es una estructura de datos en la cual cada nodo puede tener un hijo izquierdo
y un hijo derecho. No pueden tener más de dos hijos (de ahí el nombre "binario"). Este árbol
dentro de todos los tipos de arboles de búsqueda entra en la categoría de sencillos ya que no
tiene muchas mas condiciones además de la de solo poder tener 2 hijos siendo estas
condiciones la que facilitan mucho el trabajo de hacer este árbol
public class ArbolB {
Nodo raiz;
int tamanio=0;
public ArbolB() {
raiz = null;
}
public void poner(int dato, String nombre){
Nodo nuevoN=new Nodo(dato,nombre);
if (raiz==null){
raiz=nuevoN; //enlaces
tamanio++;
}else{
Nodo aux=raiz;
Nodo padre;
while(true){
padre=aux;
if(dato<aux.contenido){//aqui estamos haciendo el filtro para saber a donde iran si a
la derecha o a la izquierda
aux=aux.hijoIzquierdo; //nota si son mayores van a la derecha y si son menores van
a la izquierda
if(aux==null){
padre.hijoIzquierdo=nuevoN;
tamanio++;
return;
}
}else{
aux=aux.hijoDerecho;
if(aux==null){
padre.hijoDerecho=nuevoN;
tamanio++;
return;
}
}
}
}
} public boolean vacio(){
return raiz==null;
}
//metodo inOrder
public void inOrder(Nodo r){
if(r!=null){
inOrder(r.hijoIzquierdo);
System.out.println(r.contenido);
inOrder(r.hijoDerecho);
}
}
public void longitud(){
System.out.println(tamanio);
}
//metodo preOrder
public void preOrder(Nodo r){
if(r!=null){
System.out.println(r.contenido);
preOrder(r.hijoIzquierdo);
preOrder(r.hijoDerecho);
}
} public void postOrder(Nodo r){
if(r!=null){
postOrder(r.hijoIzquierdo);
postOrder(r.hijoDerecho);
System.out.println(r.contenido);
}
}
public boolean borrado(int dato){
Nodo aux=raiz;
Nodo padre=raiz;
boolean Izquierda=true;
while(aux.contenido!=dato){
padre=aux;
if(dato<aux.contenido){
aux=aux.hijoIzquierdo;
}else{
Izquierda=false;
aux=aux.hijoDerecho;
}
if(aux==null){
return false;
}
}
if(aux.hijoIzquierdo==null&&aux.hijoDerecho==null){
if(aux==raiz){
raiz=null;
}else if(Izquierda){
padre.hijoIzquierdo=null;
}else{
padre.hijoDerecho=null;
}
}else if(aux.hijoDerecho==null){
if(aux==raiz){
raiz=aux.hijoIzquierdo;
}else if(Izquierda){
padre.hijoIzquierdo=aux.hijoIzquierdo;
}else{
padre.hijoDerecho=aux.hijoIzquierdo;
}
}else if(aux.hijoIzquierdo==null){
if(aux==raiz){
raiz=aux.hijoDerecho;
}else if(Izquierda){
padre.hijoIzquierdo=aux.hijoDerecho;
}else{
padre.hijoDerecho=aux.hijoDerecho;
}
}else{
Nodo cambio=obtenerNodo(aux);
if(aux==raiz){
raiz=cambio;
}else if(Izquierda){
padre.hijoIzquierdo=cambio;
}else{
padre.hijoDerecho=cambio;
}
cambio.hijoIzquierdo=aux.hijoIzquierdo;
}
return true;
}
public Nodo obtenerNodo(Nodo cambio){
Nodo cambioPadre=cambio;
Nodo nuevoN=cambio;
Nodo aux=cambio.hijoDerecho;
while(aux!=null){
cambioPadre=nuevoN;
nuevoN=aux;
aux=aux.hijoIzquierdo;
}
if(nuevoN!=cambio.hijoDerecho){
cambioPadre.hijoIzquierdo=nuevoN.hijoDerecho;
nuevoN.hijoDerecho=cambio.hijoDerecho;
}
System.out.println("el nuevo nodo es "+nuevoN);
tamanio--;
return nuevoN;
//metodo buscar
public Nodo buscar(int dato){
Nodo auxNodo=raiz;
while(auxNodo.contenido!=dato){
if(dato<auxNodo.contenido){
auxNodo=auxNodo.hijoIzquierdo;
}else{
auxNodo=auxNodo.hijoDerecho;
}
if(auxNodo==null){
return null;
}
}
return auxNodo;
}
}
Bibliografia
https://www.aprenderaprogramar.com/foros/index.php?topic=1367.5;wap2
https://ccia.ugr.es/~jfv/ed1/tedi/cdrom/docs/arb_BB.htm
https://www.cs.us.es/~jalonso/cursos/i1m-15/temas/tema-19.html
Concluciones
Como aprendimos en esta tarea los arboles son muy útiles para almacenar una alta
cantidad de datos entre otras funciones como ciencia de datos etc.. claro que dentro de
todas las estructuras creo que estas son quizás las que menos me gustan por lo molestos
que llegan a ser algunos de sus métodos mas útiles y necesarios como el borrado o las
rotaciones (pd resto de las conclusiones en el video).