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

18
UNIVERSIDAD TECNICA DEL NORTE ESTRUCTURA DE DATOS II CARRERA DE INGENIERIA EN SISTEMAS COMPUACIONALES UTN-FICA-CISIC 2012

description

Borrado-Inserccion y Busqueda en arboles binarios de busqueda

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

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

UNIVERSIDAD TECNICA DEL NORTE

ESTRUCTURA DE DATOS II

CARRERA DE INGENIERIA EN SISTEMAS COMPUACIONALES

UTN-FICA-CISIC 2012

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

ÁRBOL ABBUn á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

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

UTN-FICA-CISIC 2012

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

OPERACIONESTodas 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

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

BÚSQUEDALa 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

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

BÚSQUEDASi se alcanza un nodo hoja y el elemento no

ha sido encontrado se supone que no existe en el árbol.

ELIMINACIÓNLa 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

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

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; }

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

Borrar un nodo sin hijos ó nodo hoja: simplemente se borra y se establece a nulo el

apuntador de su padre.

UTN-FICA-CISIC 2012

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

13

21

10 18 25 40

33Nodo Padre localizado

13

21

10 18 25 40

33

Desconectarlo y liberar el nodo

Paso1

Paso2

Eliminar el valor 25

UTN-FICA-CISIC 2012

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

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

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

13

21

10 18 25 40

33Nodo Padre localizado

13

21

10 18

25

40

33

Conectar el Nodo Padre con el Nodo Hijo y liberar el nodo.

Paso1

Paso2

Eliminar el valor 25

29

27 30

29

27 30

UTN-FICA-CISIC 2012

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

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

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

13

21

10 18 2540

33

Localizar el valor a borrar

Paso1

Eliminar el valor 21 utilizando el predecesor

13

21

10 18 2540

33

Localizar el Predecesor

Paso2

13

18

10 18 2540

33

Copiar el valor del Predecesor al nodo que contenía el valor a borrar

Paso3

13

18

10 18 25 40

33

Desconectar y liberar el nodo del Predecesor

Paso4

UTN-FICA-CISIC 2012

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

Eliminar el valor 21 utilizando el Sucesor

13

21

10 18 2540

33

Localizar el valor a borrar

Paso1

13

21

10 18 2540

33

Localizar el Sucesor

Paso2

13

25

10 18 2540

33

Copiar el valor del Sucesor al nodo que contenía el valor a borrar

Paso3

13

18

10 18 25 40

33

Desconectar y liberar el nodo del Sucesor

Paso4

UTN-FICA-CISIC 2012

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

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 {

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

//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

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

} } 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 }

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

GRACIAS

UTN-FICA-CISIC 2012