You are on page 1of 35

rboles

Dr. Alfredo Gutirrez

Un rbol es una estructura jerrquica aplicada sobre una coleccin de


elementos u objetos llamados nodos.
Una de las caractersticas importantes en una estructura de rbol es que
cada nodo puede apuntar a uno o varios nodos (hijos), pero cada nodo
slo puede ser apuntado por un solo nodo (padre). Esto hace que la
estructura de rbol est fuertemente jerarquizada, y es lo que en
realidad les da la apariencia de rbol.
Los rboles crean una relacin entre nodos dando lugar a trminos tales
como: padre, hijo, hermano, antecesor, sucesor, ancestro, raz, hojas,
ramas, etc.

Dr. Alfredo Gutirrez

Raz: Un slo nodo es por si mismo un rbol, siendo tambin la raz de


dicho rbol. La raz del rbol se define como el nodo que no tiene
ascendiente.
Hoja: Todo nodo que no tiene ramificaciones es el elemento que no tiene
descendientes y se le conoce con el nombre de hoja o nodo terminal.
Altura: La altura de un rbol se define como el nivel del nodo de mayor
nivel. Como cada nodo de un rbol puede considerarse a su vez como la
raz de un rbol, tambin podemos hablar de altura de ramas.
Padre: Es el nodo que contiene un puntero al un (o ms) nodo dado.
Hijo: Cualquiera de los nodos apuntados por uno de los nodos del rbol.
Hermano: Los nodos hijos del mismo padre se llaman hermanos. Estos
nodos son descendientes directos de un mismo nodo.
Grado: Esta definido por el nmero de hijos que puede tener un elemento
dentro del rbol.
Peso: Se define como la cantidad de hojas en el rbol.
Ruta: Se define como la longitud de trayectoria interna de un nodo, es el
nmero de aristas o ramas que se recorren desde la raz al nodo.
Nivel o profundidad: se define para cada elemento del rbol como la
distancia a la raz, medida en nodos. El nivel de la raz es cero y el de sus
hijos uno.
Dr. Alfredo Gutirrez

rbol
A

P
Q

Dr. Alfredo Gutirrez

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

Dr. Alfredo Gutirrez

rbol binario

Dr. Alfredo Gutirrez

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

Dr. Alfredo Gutirrez

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.

Dr. Alfredo Gutirrez

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.

Dr. Alfredo Gutirrez

11

Procedimiento para la insercin de un elemento en un rbol binario de bsqueda

Si el subrbol actual esta vaco:


Crear un nuevo nodo asignarlo como raz del
subrbol
Colocar el elemento en el campo correspondiente
Inicializar subrboles izquierdo y derecho
De lo contrario:
Si el elemento a insertar es menor que el
elemento en el subrbol actual:
Insertar el elemento en el subrbol izquierdo
De lo contrario:
Insertar el elemento en el subrbol derecho

Inserta siempre como hoja


Mantiene el rbol ordenado
Mantiene la regla de orden de llegada
Dr. Alfredo Gutirrez

Ejemplos en pintarrn
12

Procedimiento para la eliminacin de un elemento en un rbol binario de


bsqueda

Si el subrbol a eliminar es una hoja:


Liberar el espacio de memoria del nodo actual
Actualizar la referencia a nulo
De lo contrario:
Sustituir el elemento actual por el elemento
mayor del subrbol izquierdo, o por elemento
menor del subrbol derecho
Eliminar el elemento utilizado para sustitucin

Elimina siempre una hoja


Mantiene el rbol ordenado
Mantiene la regla de orden de llegada
Dr. Alfredo Gutirrez

Ejemplos en pintarrn
13

rbol completo: Todos los nodos tienen


todos los hijos que pueden tener

Altura (n)

No. nodos

7
2n-1

15

31

Dr. Alfredo Gutirrez

14

Dr. Alfredo Gutirrez

15

funcin: inicializa
recibe: rbol
regresa: nada
rbol = NULO

Dr. Alfredo Gutirrez

16

funcin: vaco
recibe: rbol
regresa: booleano
rbol = NULO?
S: devolver: verdadero
No: devolver: falso

Dr. Alfredo Gutirrez

17

funcin: recupera
recibe: pos, rbol
regresa: elemento
rbol = NULO pos = NULO?
S: Error de excepcin!
Insuficiencia de datos
Terminar
No: devolver: poselem

Dr. Alfredo Gutirrez

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)

Dr. Alfredo Gutirrez

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

You might also like