Inserción,borrado y búsqueda en Arboles Binarios(Java)

50,677 views

Published on

Borrado-Inserccion y Busqueda en arboles binarios de busqueda

Published in: Education
3 Comments
9 Likes
Statistics
Notes
No Downloads
Views
Total views
50,677
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
935
Comments
3
Likes
9
Embeds 0
No embeds

No notes for slide

Inserción,borrado y búsqueda en Arboles Binarios(Java)

  1. 1. UNIVERSIDAD TECNICA DEL NORTE CARRERA DE INGENIERIA EN SISTEMAS COMPUACIONALES ESTRUCTURA DE DATOS IIUTN-FICA-CISIC 2012
  2. 2. ÁRBOL ABB Un árbol binario de búsqueda es un tipo particular de árbol binario que presenta una estructura de datos en forma de árbol usada en informática. UTN-FICA-CISIC 2012
  3. 3. UTN-FICA-CISIC 2012
  4. 4. OPERACIONESTodas las operaciones realizadas sobre árboles binarios de búsqueda están basadas en la comparación de los elementos o clave de los mismos. UTN-FICA-CISIC 2012
  5. 5. BÚSQUEDA La búsqueda consiste acceder a la raíz del árbol, si el elemento a localizar coincide con éste la búsqueda ha concluido con éxito. Si el elemento es menor se busca en el subárbol izquierdo y si es mayor en el derecho. La búsqueda de un elemento en un ABB (Árbol Binario de Búsqueda) se puede realizar de dos formas, iterativa o recursiva. UTN-FICA-CISIC 2012
  6. 6. BÚSQUEDA Si se alcanza un nodo hoja y el elemento no ha sido encontrado se supone que no existe en el árbol. ELIMINACIÓN La operación de borrado no es tan sencilla como las de búsqueda e inserción. Existen varios casos a tener en consideración. UTN-FICA-CISIC 2012
  7. 7. CODIGO EN JAVA METODO BUSCAR public NodoABB buscar(String r){ NodoABB a=(NodoABB) raiz.getInfo(); while(a!=null){ Persona per=(Persona)a.getInfo(); if(per.getCedula().equals(r)) return a; else if (per.getCedula().compareTo(r)>0) a=a.getIzq(); else if(per.getCedula().compareTo(r)<0) a=a.getDer(); } return null; }
  8. 8.  Borrar un nodo sin hijos ó nodo hoja: simplemente se borra y se establece a nulo el apuntador de su padre. UTN-FICA-CISIC 2012
  9. 9. Paso Eliminar el valor 25 21 1 Nodo Padre 33 localizado 13 Paso 10 18 25 40 21 2 13 33 10 18 40 25 Desconectarlo y liberar el nodo UTN-FICA-CISIC 2012
  10. 10.  Borrar un nodo con un subárbol hijo: se borra el nodo y se asigna su subárbol hijo como subárbol de su padre. Eliminar Nodo 70. UTN-FICA-CISIC 2012
  11. 11. Paso 21 Eliminar el valor 25 1 Nodo Padre 33 localizado 13 Paso 10 18 25 40 21 2 29 13 33 25 27 30 40 10 18 29 Conectar el Nodo Padre con el Nodo 27 30 Hijo y liberar el nodo. UTN-FICA-CISIC 2012
  12. 12. Eliminar nodo con dos hijos1. Localizar el nodo predecesor o sucesor del nodo a borrar.  El PREDECESOR es “el Mayor de los Menores”.  El SUCESOR es “el Menor de los Mayores”.  Para la implementación es igual de eficiente programar la búsqueda del predecesor que del sucesor.2. El valor del Predecedor (o sucesor) se copia al nodo a borrar.3. Eliminar el nodo del predecesor (o sucesor según sea el caso).UTN-FICA-CISIC 2012
  13. 13. Eliminar el valor 21 utilizando el predecesorPaso Localizar el valor a Paso 21 1 21 borrar 2 13 33 13 33 10 40 40 18 25 10 18 25 Localizar el Predecesor Copiar el valor del PasoPaso Predecesor al nodo que 4 18 3 18 contenía el valor a borrar 13 33 13 33 10 25 40 18 10 18 40 25 Desconectar y liberar el UTN-FICA-CISIC 2012 nodo del Predecesor
  14. 14. Eliminar el valor 21 utilizando el SucesorPaso Localizar el valor a Paso 21 1 21 borrar 2 13 33 13 33 10 40 40 18 25 10 18 25 Localizar el Sucesor Copiar el valor del PasoPaso Sucesor al nodo que 4 18 3 25 contenía el valor a borrar 13 33 13 33 10 18 25 40 10 18 40 25 Desconectar y liberar el nodo del Sucesor UTN-FICA-CISIC 2012
  15. 15.  public boolean Borrar(String dato) { NodoABB aux2 = null; NodoABB aux = (buscar(dato)); if (buscar(dato) != null)// SI ES NODO HOJA { if ((aux.getIzq() == null) && (aux.getDer() == null)) { aux = null; } else { if (aux.getIzq() != null && aux.getDer() != null)//SI TIENE 2 HIJOS { if (aux == raiz)//Si es el nodo raiz con 2 hijos { aux2 = aux.getIzq(); aux = aux.getDer(); while (aux.getIzq() != null) { aux = aux.getIzq();//Recorre por la izquierda } aux.setIzq(aux2); } else {
  16. 16.  //Si es otro nodo con 2 hijos aux2 = aux.getIzq(); aux = aux.getDer(); while (aux.getIzq() != null) { aux = aux.getIzq();// recorre por la Izquierda } aux.setIzq(aux2); } } else { if (aux == raiz) //SI EL NODO A BORRAR ES RAIZ Y TIENE UN SOLO HIJO { if (aux.getIzq() != null)//Si el nodo es raiz y tiene 1 solo hijo por la Izquierda { aux = aux.getIzq(); } else { aux = aux.getDer(); //Si el nodo es raiz y tiene 1 solo hijo por la Derecha
  17. 17.  } } else { if (aux.getIzq() != null) //Si es otro nodo y tiene 1 solo hijo por la Izquierda { aux = aux.getIzq(); } else { aux = aux.getDer();//Si es otro nodo y tiene 1 solo hijo por la Izquierda } } } } return true;//Cuando pudo ser encontrado el nodo a eliminar } return false; //Cuando no pudo ser encontrado el nodo a eliminar }
  18. 18. GRACIASUTN-FICA-CISIC 2012

×