Académique Documents
Professionnel Documents
Culture Documents
UTN-FICA-CISIC 2012
RBOL ABB
Un rbol binario de bsqueda es un tipo particular
de rbol binario que presenta una estructura de datos en forma de rbol usada en informtica.
UTN-FICA-CISIC 2012
UTN-FICA-CISIC 2012
OPERACIONES
Todas las operaciones realizadas sobre rboles binarios de bsqueda
UTN-FICA-CISIC 2012
BSQUEDA
La bsqueda consiste acceder a la raz del rbol, si el
elemento a localizar coincide con ste la bsqueda ha concluido con xito. Si el elemento es menor se busca en el subrbol izquierdo y si es mayor en el derecho. La bsqueda de un elemento en un ABB (rbol Binario de Bsqueda) se puede realizar de dos formas, iterativa o recursiva.
UTN-FICA-CISIC 2012
BSQUEDA
Si se alcanza un nodo hoja y el elemento no ha sido
ELIMINACIN
La operacin de borrado no es tan sencilla como las de
UTN-FICA-CISIC 2012
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; }
apuntador de su padre.
UTN-FICA-CISIC 2012
Eliminar el valor 25
21
33
10
18
25
40
Paso 2
13
21
33
10
18
25
40
Desconectarlo y liberar el nodo
UTN-FICA-CISIC 2012
nodo y se asigna su subrbol hijo como subrbol de su padre. Eliminar Nodo 70.
UTN-FICA-CISIC 2012
Eliminar el valor 25
33
Nodo Padre localizado
10
18
25 29 27
40
Paso 2
13
21
33 25
30
10
18 29 27 30
40
UTN-FICA-CISIC 2012
2. 3.
El valor del Predecedor (o sucesor) se copia al nodo a borrar. Eliminar el nodo del predecesor (o sucesor segn sea el caso).
UTN-FICA-CISIC 2012
Paso 1
13
21
Paso 2
13
21 33
33 10
10
18
25
40
18
25
40
Localizar el Predecesor
Paso 3
13
10
18
Paso 4
13
18 33
33 10 18 25 40
18
25
40
Desconectar y liberar el nodo del Predecesor
UTN-FICA-CISIC 2012
Paso 1
13
21
Paso 2
13
21 33
33 10
10
18
25
40
18
25
40
Localizar el Sucesor
Paso 3
13
10
25
Paso 4
13
18 33
33 10 18 25 40
Desconectar y liberar el nodo del Sucesor
18
25
40
UTN-FICA-CISIC 2012
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 {
//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
} } 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 }
GRACIAS
UTN-FICA-CISIC 2012