Professional Documents
Culture Documents
rbol
A
P
Q
S
4
rboles binarios
Una importante simplificacin del modelo es la de tomar en cuenta rboles que
tengan slo nodos de grados dos (es el grado mnimo), denominados rboles
binarios.
Un rbol binario es aquel en el cual cada nodo tiene no ms de dos
descendientes, es decir: un nodo puede tener cero, uno, o dos descendientes.
As cada nodo en un rbol binario puede tener un descendiente izquierdo y/o uno
derecho.
La importancia de un rbol binario radica en que posibilita la creacin de una
estructura que imita un proceso de decisin si/no (falso/verdadero).
Por ejemplo, si se construye un rbol binario para almacenar valores numricos,
dicho rbol puede tener lo valores menores en los subrboles izquierdos y los
valores mayores en los subrboles derechos (o viceversa); lo cual facilita buscar
un valor particular en el rbol, con un algoritmo tan simple como el de la
bsqueda binaria.
Dr. Alfredo Gutirrez
rbol binario
rbol binario
Operaciones
inicializa
vaco
inserta
elimina
hijo izquierdo
hijo derecho
localiza
recupera
recorre preorder
recorre inorder
recorre postorder
anula
nada
booleano
nada
nada
posicin
posicin
posicin
elemento
nada depende del proceso
nada depende del proceso
nada depende del proceso
nada
Operaciones
inicializa: Se aplica al crear el rbol, esta operacin asegura que el rbol est
vaco en su estado inicial, dejndolo preparado para iniciar operaciones sobre
ella. Recibe el rbol que se inicializar. No devuelve nada.
vaco: Revisa el estado actual del rbol e informa si es que se encuentra vaco.
Recibe el rbol que se revisar. Si no existe ningn elemento en el rbol regresa
verdadero, si existe uno o ms elementos regresa falso.
inserta: Coloca un elemento como hoja del rbol en una posicin en la que se
mantiene el orden dentro del rbol se genera un error si el rbol se encuentra
lleno o si la posicin proporcionada es invlida. Recibe el elemento a insertar y la
rbol donde se har la insercin. No devuelve nada.
elimina: Borra un elemento en una posicin dada del rbol, cuidando mantener
el orden, se genera un error si el rbol encuentra vaco o si la posicin
proporcionada es invlida. Recibe la posicin del elemento a eliminar y rbol
donde se har la eliminacin. No devuelve nada.
Operaciones
hijo izquierdo: Obtiene la posicin del hijo izquierdo respecto a un subrbol en
una posicin dada. Recibe un rbol y la posicin de un subarbol. Regresa la
posicin del hijo izquierdo, si el rbol esta vaco, o si la posicin dada es invlida,
o no existe un hijo izquierdo en sa posicin, regresa una posicin invlida.
hijo derecho: Obtiene la posicin del hijo deecho respecto a un subrbol en una
posicin dada. Recibe un rbol y la posicin de un subarbol. Regresa la posicin
del hijo derecho, si el rbol esta vaco, o si la posicin dada es invlida, o no
existe un hijo derecho en sa posicin, regresa una posicin invlida.
localiza: Determina la posicin de un elemento dentro de un rbol. Recibe el
elemento a buscar y una rbol. Devuelve la posicin del elemento dentro del
rbol, si le rbol esta vaco, o si el elemento no se encuentra en el rbol, regresa
una posicin invlida.
recupera: Obtiene el elemento que se encuentra en una determinada posicin en
el rbol. Se genera un error si el rbol est vaco o si la posicin proporcionada
es invlida. Recibe una posicin y un rbol. Devuelve el elemento en la posicin
dada dentro del rbol.
Dr. Alfredo Gutirrez
10
Operaciones
recorre preorder: Realiza un proceso (p.e. imprimir) en todos y cada uno de los
elementos de un rbol en una secuencia recursiva en el siguiente orden:
Procesa elemento actual preorder en subrbol izquierdo preorder en
subrbol derecho. Recibe el rbol a recorrer. No regresa nada.
recorre inorder: Realiza un proceso (p.e. imprimir) en todos y cada uno de los
elementos de un rbol en una secuencia recursiva en el siguiente orden: Inorder
en subrbol izquierdo procesa elemento actual inorder en subrbol
derecho. Recibe el rbol a recorrer. No regresa nada.
recorre postorder: Realiza un proceso (p.e. imprimir) en todos y cada uno de
los elementos de un rbol en una secuencia recursiva en el siguiente orden:
postorder en subrbol izquierdo postorder en subrbol derecho procesa
elemento actual. Recibe el rbol a recorrer. No regresa nada.
anula: Elimina todos y cada uno de los elementos dentro de un rbol, resultando
en un rbol vaco. Recibe rbol a anular. No devuelve nada.
11
Ejemplos en pintarrn
12
Ejemplos en pintarrn
13
Altura (n)
No. nodos
7
2n-1
15
31
14
15
funcin: inicializa
recibe: rbol
regresa: nada
rbol = NULO
16
funcin: vaco
recibe: rbol
regresa: booleano
rbol = NULO?
S: devolver: verdadero
No: devolver: falso
17
funcin: recupera
recibe: pos, rbol
regresa: elemento
rbol = NULO pos = NULO?
S: Error de excepcin!
Insuficiencia de datos
Terminar
No: devolver: poselem
18
funcin: inserta
recibe: elem, rbol
regresa: nada
rbol = NULO?
S: aux = nuevo nodo
auxelem = elem
rbol = aux
No: elem < rbolelem?
S: inserta(rbolizq, elem)
No: inserta(rbolder, elem)
Dr. Alfredo Gutirrez
19
funcin: localiza
recibe: elem, rbol
regresa: posicin
rbol = NULO?
S: devolver NULO
terminar
No: elem = rbolelem?
S: devolver: rbol
No: elem < rbolelem
S: devolver: localiza(elem, rbolizq)
No: devolver: localiza(elem, rbolder)
Dr. Alfredo Gutirrez
20
funcin: menor
recibe: rbol
regresa: posicin
rbol = NULO?
S: devolver: NULO
terminar
No: rbolizq = NULO?
S: devolver: rbol
No: devolver: menor(rbolizq)
Dr. Alfredo Gutirrez
21
funcin: mayor
recibe: rbol
regresa: posicin
rbol = NULO?
S: devolver: NULO
terminar
No: rbolder = NULO?
S: devolver: rbol
No: devolver: mayor(rbolder)
Dr. Alfredo Gutirrez
22
funcin: es_hoja
recibe: rbol
regresa: booleano
rbol = NULO?
S: devolver: falso
rbolizq = NULO y rbolder = NULO?
S: devolver: verdadero
No:devolver: falso
Dr. Alfredo Gutirrez
23
funcin: recorrido_preorder
recibe: rbol
regresa: nada
rbol = NULO?
S: terminar
imprimir: rbolelem
recorrido_preorder(rbolizq)
recorrido_preorder(rbolder)
Dr. Alfredo Gutirrez
24
funcin: recorrido_inorder
recibe: rbol
regresa: nada
rbol = NULO?
S: terminar
recorrido_inorder(rbolizq)
imprimir: rbolelem
recorrido_inorder(rbolder)
Dr. Alfredo Gutirrez
25
funcin: recorrido_postorder
recibe: rbol
regresa: nada
rbol = NULO?
S: terminar
recorrido_postorder(rbolizq)
recorrido_postorder(rbolder)
imprimir: rbolelem
Dr. Alfredo Gutirrez
26
funcin: elimina
recibe: pos, rbol
regresa: nada
rbol = NULO pos = NULO?
S:Desplegar mensaje de error
Terminar
eshoja(rbol)?
S: liberar rbol
rbol = NULO
No:rbolizq NULO?
S: pos_reemplazo = mayor(rbolizq)
No: pos_reemplazo = menor(rbolder)
rbolelem = pos_reemplazoelem
elimina(pos_reemplazo, rbol)
Dr. Alfredo Gutirrez
27
funcin: altura
recibe: rbol
regresa: entero
rbol = NULO?
S: devolver: 0
No:alt_izq = altura(rbolizq)
alt_der = altura(rbolder)
alt_izq > alt_der?
S: devolver: alt_izq + 1
No: devolver: alt_der + 1
Dr. Alfredo Gutirrez
28
funcin: fact_eq
recibe: rbol
regresa: entero
rbol = NULO?
S: devolver: 0
No: devolver: altura(rbolder) altura(rbolizq)
29
funcin: balanceo
recibe: rbol
regresa: nada
fact_eq(rbol) < 1?
S: fact_eq(rbol izq) = 1?
S: rot_sim_der(rbol)
No: rot_dob_der(rbol)
Terminar
fact_eq(rbol) > 1?
S: fact_eq(rbol izq) = 1?
S: rot_sim_izq(rbol)
No: rot_dob_izq(rbol)
Terminar
Dr. Alfredo Gutirrez
30
funcin: balanceo
recibe: rbol
regresa: nada
fact_eq(rbol) < 1?
S: fact_eq(rbol izq) = 1?
S: rot_sim_der(rbol)
No: rot_dob_der(rbol)
Terminar
fact_eq(rbol) > 1?
S: fact_eq(rbol der) = 1?
S: rot_sim_izq(rbol)
No: rot_dob_izq(rbol)
Terminar
Dr. Alfredo Gutirrez
31
funcin: rot_sim_der
recibe: rbol
regresa: nada
aux1 = rbolizq
aux2 = rbolizqder
rbolizq = aux2
aux1der = rbol
rbol = aux1
Dr. Alfredo Gutirrez
32
funcin: rot_sim_izq
recibe: rbol
regresa: nada
aux1 = rbolder
aux2 = rbolderizq
rbolder = aux2
aux1izq = rbol
rbol = aux1
Dr. Alfredo Gutirrez
33
funcin: rot_dbl_der
recibe: rbol
regresa: nada
aux1 = rbolizq
aux2 = aux1der
aux3 = aux2izq
aux4 = aux2der
rbolizq = aux4
aux1der = aux3
aux2izq = aux1
rbol = aux2
Dr. Alfredo Gutirrez
34
funcin: rot_dbl_izq
recibe: rbol
regresa: nada
aux1 = rbolder
aux2 = aux1izq
aux3 = aux2der
aux4 = aux2izq
rbolder = aux4
aux1izq = aux3
aux2der = aux1
rbol = aux2
Dr. Alfredo Gutirrez
35