00:00:00
bueno
00:00:12
qué tal qué tal ya estamos aquí con el
00:00:14
vídeo tutorial número 46 de la serie
00:00:16
estructuras de datos con llave y vamos a
00:00:18
empezar con la acción muy bien el día de
00:00:20
hoy vamos a implementar nuestro abel al
00:00:24
cual lo vamos a dividir en dos partes
00:00:25
para que nos haya no se haga tan largo y
00:00:28
tan tedioso el asunto vamos a crear
00:00:30
nuestra nuestra aplicación a la cual le
00:00:33
vamos a poner cda vídeo punto
00:00:39
es el 46 verdad perfecto
00:00:43
aplicamos esto de aquí y le ponemos
00:00:46
finish
00:00:49
perfecto entonces ahora lo que vamos a
00:00:51
hacer es crear dos nuevas clases en esta
00:00:55
parte de aquí vamos a crear nuestra
00:00:56
primera clase a la cual le vamos a poner
00:00:59
nodo árbol
00:01:03
de el que se va a ser nuestro nodo y una
00:01:07
nueva clase que se llame árbol
00:01:11
a vélez que es en donde vamos a poner
00:01:14
toda la lógica de nuestro de nuestra
00:01:16
aplicación vamos a arrancar entonces en
00:01:19
nuestra clase no dudar por el día de
00:01:21
vamos a trabajar en nuestra clase modo
00:01:23
árbol y dentro de nuestra clase no los
00:01:26
vamos a declarar dos atributos el
00:01:28
clásico gato y vamos a tener uno nuevo
00:01:31
que se va a llamar
00:01:32
efe efe factor de equilibrio
00:01:35
eso es en ese vamos a trabajar también
00:01:37
es lo nuevo vamos a poner entonces
00:01:39
nuestro constructor nodo árbol nodo
00:01:43
árbol la fe el lema ahí están y
00:01:46
lógicamente este nodo árbol ave le va a
00:01:49
recibir el dato entonces le ponemos this
00:01:53
punto dato igual a d y le ponemos this
00:01:58
puntos e igual a cero porque al
00:02:02
principio pues no sabemos que tiene 10
00:02:04
puntos hijo izquierdo
00:02:08
que por cierto no nos hemos declarado
00:02:10
hay que declarar los en esta parte de
00:02:12
acá porque pues es obvio necesitamos un
00:02:14
hijo izquierdo y un hijo derecho aquí
00:02:16
vamos a poner los nodos árbol a vélez y
00:02:20
le vamos a poner hijo y si pierdo
00:02:26
y aparte lógicamente el hijo derecho
00:02:31
de hecho ahí está y en esta parte vamos
00:02:36
a poner la horas y luego izquierdo igual
00:02:41
ah
00:02:42
y lógicamente dis
00:02:45
qué bueno soy como secretaria hijo
00:02:47
derecho igual
00:02:50
eso es todo lo que va a tener nuestra
00:02:53
clase
00:02:55
modo árbol de el perfecto hasta ahí
00:02:58
vamos más que al millones vamos para que
00:03:01
ahora a nuestra clase árbol a vélez y en
00:03:05
esta clase árbol
00:03:07
abel exactamente en dónde vamos a hacer
00:03:09
todo el show
00:03:12
que yo vamos a hacer en esa parte de ahí
00:03:14
pues lo primero que necesitamos pues es
00:03:17
lógicamente empezar a trabajar con
00:03:20
nuestra raíces entonces vamos a declarar
00:03:22
nuestra raíz ya la cual vamos a poner
00:03:24
primer nudo un árbol bl y le vamos a
00:03:31
poner raíz a y está perfecto ahora aquí
00:03:36
por aquí todo árbol ave el equipo lo que
00:03:40
tengo por aquí en esta parte de aquí
00:03:42
déjenme checo porque diablos me está
00:03:44
saliendo de aquí yo creo que el árbol y
00:03:48
si le ponemos lo que es tal vez sería
00:03:50
más bonito verdad y te das cuenta que no
00:03:51
está me está como que marcando una rocío
00:03:54
medio medio subliminal vamos para acá y
00:03:59
lo tenemos vamos a copiar esto de aquí
00:04:01
porque saben que soy re bueno
00:04:03
escribiendo y
00:04:05
y aquí lo vamos a poner así y así ya se
00:04:09
ve más bonito y aunque pues uno nunca
00:04:11
vaya del secretariado no se me da común
00:04:14
y aunque tomé cursos digo
00:04:16
definitivamente no se me dais la
00:04:18
programación tampoco finalmente nada más
00:04:20
es estar ayudando al prójimo perdiendo
00:04:22
el tiempo un ratito aquí para que esto
00:04:25
esté más que perfecto muy bien pues
00:04:26
entonces ahora lo que vamos a hacer es
00:04:28
después de haber declarado nuestro
00:04:30
nuestro modo árbol a vélez llamado raíz
00:04:33
pues vamos a crear nuestro constructor a
00:04:35
lo cual le vamos a poner árbol a bl y ya
00:04:39
sabemos que ahí lo tenemos y para lo
00:04:41
único que nos va a servir el constructor
00:04:43
ya hacemos es para inicializar la raíz
00:04:46
en nulo ahí está todo perfecto ok vamos
00:04:51
a arrancar vamos a crear un método
00:04:53
primer método el primer método que vamos
00:04:55
a hacer es para buscar un nuevo por ahí
00:04:57
a lo mejor después éste lo ocupamos e
00:05:00
igual no lo ocupamos pero finalmente las
00:05:02
las operaciones básicas de una bl pues
00:05:06
es buscar un modo insertar un nodo y
00:05:08
eliminar uno
00:05:09
vamos a crear nuestro método buscar y
00:05:12
aquí vamos a poner public
00:05:15
modo árbol a vélez buscar
00:05:19
y ahora sí vamos a poner aquí
00:05:23
lógicamente para buscar pues necesitamos
00:05:26
el dato y aparte necesitamos la raíz
00:05:28
nodo árbol y vamos a poner r ahí está ok
00:05:31
vamos a retornar un tipo de del equipo
00:05:33
no lo vamos a empezar a validar le vamos
00:05:36
a poner si reid igual igual a 9 qué
00:05:39
quiere decir si la raíz es igual al
00:05:41
igual el muy pues hay que retornar un un
00:05:43
porque no hay absolutamente nada en
00:05:46
donde buscó si no hay nada en otro caso
00:05:48
si por ejemplo ere de dato es digamos
00:05:55
igualito a de qué quiere decir si es
00:05:57
igual y puede que ya lo encontró no y
00:06:00
entonces vamos a retornar
00:06:01
aquí vamos a retornar pues a r
00:06:04
efectivamente en otro caso sino si por
00:06:08
ejemplo ere de dato es menor
00:06:13
el dato buscado por ejemplo que es lo
00:06:17
que vamos a retornar pues vamos a
00:06:18
retornar pero vamos a buscar cómo se
00:06:20
recursividad vamos a buscar por la
00:06:22
izquierda porque supone que el error de
00:06:24
dato es menor al dato buscado no
00:06:27
entonces hay que si es menor entonces
00:06:29
hay que buscar por la derecha agarrar
00:06:31
perfecto estamos en todo buscar y le
00:06:34
vamos a poner ere de hijo derecho
00:06:37
ahí está perfecto si de cierre de dato
00:06:40
es éste
00:06:44
menor a de pues simplemente vamos a
00:06:48
buscar volvemos a abbas hemos
00:06:51
recursividad y buscamos por la derecha r
00:06:54
de hijo derecho pero lógicamente hay que
00:06:56
recuerda que este recibe un parámetro
00:06:58
que el cual parámetro esa parte del nodo
00:07:01
es un dato entonces le ponemos de y así
00:07:04
ya se va a ver más bonito no entonces
00:07:06
ahora le ponemos si no pues no hay de
00:07:08
otra si no es él si no es menor es mayor
00:07:11
de hecho aquí vamos a validar en algún
00:07:14
momento recordando que nuestro árbol
00:07:15
binario anterior no tenía validación en
00:07:17
cuanto a nodos
00:07:18
a ver los duplicados en este ya no va a
00:07:20
ver porque el árbol balanceado no tiene
00:07:22
nodos duplicados entonces somos para que
00:07:24
ésta le vamos a poner return buscar por
00:07:28
dónde vas a buscar ok de gomita ere de
00:07:33
hijo izquierdo ok
00:07:35
ahí está perfecto hasta ahí vamos bien
00:07:37
eso es lo que haría en teoría nuestro
00:07:39
método buscar para buscar un nudo en el
00:07:42
árbol vamos a recursividad a en su
00:07:45
máxima expresión vamos para este lado y
00:07:49
ahora lo que vamos a crear es un método
00:07:51
para obtener obtener el factor de
00:07:55
equilibrio
00:07:57
ahí está ok vamos a obtener el factor de
00:08:00
equilibrio entonces vamos a retornar un
00:08:02
entero y al cual le vamos a poner
00:08:04
obtener
00:08:06
efe que va a recibir de de parámetro
00:08:10
pues un tipo nodo árbol al cual le vamos
00:08:14
a poner equis porque no sabemos cuál es
00:08:16
el tomar a sí mismo no la variable es lo
00:08:17
de menos ahora sí vámonos a la lógica
00:08:20
vamos a comenzar si x es igual igual a
00:08:24
nu lo que quiere decir si x es igual a
00:08:26
igual a nulo muy fácil retornamos un -1
00:08:30
para que más adelante vas a saber para
00:08:32
qué diantres s s menos 1 en otro caso
00:08:36
simplemente qué vamos a hacer vamos a
00:08:39
retornar x punto f
00:08:43
retornamos el factor de equilibrio del
00:08:45
kk ok perfecto eso es para obtener el
00:08:48
factor de equilibrio ahora vamos a hacer
00:08:51
las rotaciones vamos a hacer la rotación
00:08:55
simple izquierda vamos a empezar con la
00:08:59
rotación simple de la izquierda y lo que
00:09:01
vamos a hacer es un método público
00:09:03
lógicamente que nos retorne un tipo de
00:09:05
tipo no de árbol y le vamos a poner
00:09:07
rotación y pierna izquierda
00:09:14
híjole qué bueno soy ya lo sabemos
00:09:16
verdad todo el mundo lo sabe que todo
00:09:18
méxico se entere como decía el programa
00:09:20
de hace mucho tiempo de él de algún
00:09:24
programa televisivo que todo méxico y
00:09:25
que todo el planeta y todo el mundo
00:09:27
mundial dijo diversia se entere rotación
00:09:30
izquierda que va a hacer con rotación de
00:09:32
izquierda todo lógicamente va a recibir
00:09:33
un uno del tipo nodo árbol al cual le
00:09:36
vamos a ponerse vivo es significativo
00:09:38
nada más no es no es más que eso y vamos
00:09:40
a crear un nodo un puntero del tipo nodo
00:09:43
árbol al cual le vamos a poner auxiliar
00:09:45
para variar un poco y lógicamente lo
00:09:48
vamos a apuntar a cede hijo izquierdo
00:09:51
ahí está ok después de que ya hicimos
00:09:53
ese yo ahora le decimos que se dé hijo
00:09:56
de hijo izquierdo va a ser igual a
00:10:00
auxiliar ahí está a auxiliar de hijo
00:10:05
derecho de hijo derecho ahí está
00:10:07
perfecto esto es nada más ir
00:10:09
reacomodando los punteros ok como
00:10:12
siempre he dicho con dibujitos todo todo
00:10:14
todo nunca lástima dijo no queremos
00:10:15
extendernos y no nos podríamos pasar
00:10:18
aquí con dibujitos viendo cómo se iban
00:10:19
manejando
00:10:21
ahora sí vamos a ponerse out el auxiliar
00:10:24
vamos a mover al auxiliar de hijo
00:10:26
derecho lo vamos a apuntar exactamente
00:10:30
hace ahí ni más ni menos después de que
00:10:32
hayamos apuntado eso hace ahora sí vamos
00:10:36
a decirle sabes que ence su factor de
00:10:38
equilibrio va a ser igual a vamos a
00:10:41
obtener el máximo muy fácil vamos
00:10:43
podemos hacer un método pero para cruz
00:10:45
ir a hacerlo si ya lo tenemos hecho
00:10:47
vamos a poner más punto max max es un
00:10:50
método que me que me devuelve el máximo
00:10:53
de dos valores es decir de dos en este
00:10:55
caso los tipos enteros entonces lo que
00:10:57
voy a hacer es no le voy a decir sabes
00:10:59
que os teme el factor de equilibrio de
00:11:03
quién de quién me vas a obtener el
00:11:04
factor de equilibrio pues va a ser muy
00:11:07
fácil del tc de hijo izquierdo
00:11:11
de punto hijo izquierdo ahí está y en
00:11:14
esta parte de acá también lo voy a
00:11:16
deslizar es que también obtenemos
00:11:17
obtener el factor de equilibrio pero
00:11:20
ahora va a ser de cee de hijo derecho
00:11:23
punto fijo derecho ahí está pero todavía
00:11:26
nos falta algo importantísimo que es muy
00:11:29
importantísimo le vamos a sumar más uno
00:11:32
porque recordemos que el factor de
00:11:34
equilibrio es el nivel más 1 es decir si
00:11:38
el último nivel es el 3 pues hay que
00:11:40
ponerle más 1 porque ese es la altura
00:11:42
real ese es el factor de equilibrio
00:11:43
aunque ya lo tenemos recapitulando ese
00:11:46
punto factor de equilibrio va a ser
00:11:49
igual a matt punto más a obtener peso
00:11:53
obtener factor de equilibrio de ese
00:11:56
punto izquierdo y también a mandamos de
00:11:59
paraná como parámetro de obtener factor
00:12:01
de equilibrio de sede hijo derecho y
00:12:03
simplemente le sumamos más muy bien
00:12:05
ahora lo que vamos a hacer es también
00:12:07
sacarle el factor de equilibrio para
00:12:09
auxiliar entonces le ponemos factor de
00:12:12
equilibrio igualdad y ahora vamos a
00:12:14
copiar todo esto que tenemos aquí
00:12:16
y vamos a poner aquí y simplemente vamos
00:12:19
a hacer vamos a ver si lo hacemos unos
00:12:20
que otros cambios ellos aquí por ejemplo
00:12:22
en auxiliar obtener pesos de auxiliar de
00:12:25
hijo izquierdo aquí vamos a lógicamente
00:12:27
a poner auxiliar ahí está levantar ahora
00:12:30
vamos a obtener que es auxiliar del hijo
00:12:33
izquierdo y después lo ponemos a obtener
00:12:35
peso de auxiliar bueno en nuestro caso
00:12:38
obtener factor de equilibrio así fue
00:12:40
como le pusimos a obtener factor de
00:12:42
equilibrio de auxiliar de hijo derecho
00:12:45
aquí vamos a ponerle auxiliar lo que y
00:12:48
lógicamente le sumamos más uno para que
00:12:51
todo esté perfecto y ahora sí
00:12:54
simplemente vamos a retornar porque
00:12:55
recuerdan que el método nos requiere
00:12:58
retornar algo y vamos a retornar
00:13:00
auxiliar
00:13:02
pero restrepo ya tenemos vamos a a
00:13:08
acá este lado vamos a reducir un poquito
00:13:10
para acceder todo ahí está ok ahora sí
00:13:14
ya tenemos a nuestro primer método para
00:13:17
la rotación vamos a hacer ahora el
00:13:19
siguiente método al cual le vamos a
00:13:21
poner rotación simple derecha derecha
00:13:25
ahí está y ahora sí vamos a hacer
00:13:28
rotación simple a la derecha lógicamente
00:13:30
utilizando la teoría que ya habíamos
00:13:32
visto anteriormente vamos a hacer una
00:13:34
pequeña copit este pequeño copy test
00:13:38
programación sustentable le vamos a
00:13:40
poner rotación derecha ahí está vamos a
00:13:44
ver si por aquí los tenemos cambios y
00:13:46
ellos todavía le vamos a decir sabes que
00:13:48
es la rotación derecha le puedes poner
00:13:52
rotación simple si aquí tú lo decía yo
00:13:54
simplemente debe poner rotación derecha
00:13:56
y ahora sí creo el nodo ar no un tipo
00:13:58
modo árbol a vélez al cual también le
00:14:01
pongo auxiliar pero ahora no lo voy a
00:14:03
apuntar enlace no la voy a apuntar hacia
00:14:06
hijos quiero sino lo voy a apuntar hacia
00:14:07
el hijo derecha ese es el primer cambio
00:14:09
éxito que acabo de hacer después
00:14:11
lógicamente en esta parte de aquí
00:14:14
nuevamente se de hijo derecho aquí le
00:14:17
cambiamos el hijo derecho va a ser igual
00:14:20
a auxiliar de hijo izquierdo en esta
00:14:22
parte de aquí le cambiamos le ponemos
00:14:24
auxiliar de hijo izquierdo perfecto
00:14:27
ahora auxiliar de hijo izquierdo
00:14:30
nuevamente aquí cambiamos auxiliar de
00:14:33
hijo izquierdo va a ser igual a c
00:14:36
hasta ahí todo va más que perfecto ahora
00:14:39
vamos a empezar a hacer el factor de
00:14:40
equilibrio se de factor de equilibrio
00:14:42
obtener obtener el máximo de cede hijo
00:14:46
izquierdo obtener factor de equilibrio
00:14:48
de se le hijo derecho más uno ahí está
00:14:52
todo perfecto y después simplemente
00:14:54
auxiliar del factor de equilibrio le
00:14:57
vamos a obtener el máximo de obtener
00:14:59
factor de equilibrio de auxiliar de hijo
00:15:03
izquierdo y aparte
00:15:05
le vamos a decir obtener el factor de
00:15:09
equilibrio de auxiliar de hijo derecho y
00:15:12
le sumamos 1 y lógicamente retornamos al
00:15:14
auxiliar lo único que hicimos fue
00:15:16
cambiar nuestros punteros de esta parte
00:15:19
de acá qué
00:15:20
lo contrario a lo anterior porque ahora
00:15:22
las rotaciones por la derecha muy bien
00:15:24
volvamos con la doble vamos a poner
00:15:28
rotación doble a la derecha ahí está
00:15:34
vamos a crear nuestro método pues vamos
00:15:36
a poner public todo árbol lógicamente
00:15:41
estación
00:15:44
rotación híjole me emociono doble de ahí
00:15:52
está y es obvio que vamos a conceder
00:15:57
primero a la izquierda de la izquierda
00:15:59
para ir villadora el mismo orden de hace
00:16:01
un rato primero hicimos la izquierda de
00:16:03
la derecha y es obvio vamos vamos a
00:16:06
tener que recibir un parámetro igual va
00:16:08
a ser de tipo nodo árbol al cuales vamos
00:16:11
a ponerle c así de fácil
00:16:14
ahora sí vamos a empezar a hacer la
00:16:15
rotación doble a la izquierda muy bien
00:16:17
vamos a crear un nuevo árbol un puntero
00:16:20
del tipo nodo aguado al cual le vamos a
00:16:22
poner temporal si quieres puedes poner
00:16:24
auxiliar otra vez yo para cambiar un
00:16:26
poco lo voy a poner temporal y ahora sí
00:16:28
lo voy a ponerse de hijo izquierdo
00:16:32
va a ser igual a rotación rotación
00:16:36
derecha
00:16:38
exactamente vamos a hacer como que en
00:16:40
esta parte vamos en dentro de este vamos
00:16:42
a mandar llamar primero a la rotación
00:16:44
derecha y le vamos a enviar de
00:16:46
parámetros de hijo izquierdo ahí está
00:16:50
perfecto ahora temporal temporal va a
00:16:54
ser igual a rotación pero ahora rotación
00:16:58
izquierda la simple la que teníamos en
00:17:01
rotación la izquierda y le vamos a
00:17:02
enviarle el parámetro simplemente ese no
00:17:04
le vamos a enviar ningún hijo ni ni en
00:17:07
lo más mínimo y simplemente vamos a
00:17:09
retornar temporal
00:17:12
ahí está así de fácil es la rotación
00:17:13
izquierda este es un algoritmo que ya
00:17:15
está implementado si tú lo buscas en
00:17:17
wikipedia ahí lo tienes incluso hasta
00:17:20
hasta estar en su los algoritmos ya nada
00:17:22
más tienes que reutilizarlos
00:17:23
lógicamente reajustando la de acordar
00:17:25
tus valores o variables que tienes ahora
00:17:28
vamos a recapitular nodo árbol abel ya
00:17:31
creamos un temporal después
00:17:33
e hijo izquierdo es decir el puntero que
00:17:35
nos envían lo vamos a apuntar a que algo
00:17:38
que nos devuelva rotación derecha de cee
00:17:41
de hijo izquierdo y después temporal
00:17:44
simplemente le asignamos lo que nos
00:17:46
devuelva rotación izquierda enviándole
00:17:49
como como parámetro el el el puntero no
00:17:53
lo que nos pasen de estado de acá y
00:17:54
simplemente retornamos temporal vamos a
00:17:57
crear el último método de este vídeo
00:17:59
porque recuerda que ésta va a estar en
00:18:00
dos partes y vamos a poner doble a la
00:18:04
izquierda
00:18:06
ahí está vamos a hacer la rotación doble
00:18:09
a la izquierda y simplemente le ponemos
00:18:10
public nodo árbol
00:18:14
rotación
00:18:16
doble
00:18:18
doble derecha derecha
00:18:22
ya cuando uno se daña se daña y ahora si
00:18:25
le ponemos a libar perfecto ahí está
00:18:28
ahora sí que vamos a hacer pues
00:18:30
nuevamente nos hacemos nuestro nuevo
00:18:32
temporal
00:18:34
temporal
00:18:36
ahí están y ahora lo que vamos a hacer
00:18:38
es ser de hijo derecho se dijo derecho
00:18:41
recordando que anteriormente en el doble
00:18:43
izquierdo eran se dijo izquierdo ahora
00:18:45
es el hijo derecho lo vamos a apuntar a
00:18:47
rotación izquierda rotación izquierda
00:18:51
aquí está enviando desde parámetros de
00:18:55
hijo derecho se de hijo derecho
00:18:57
ahí está perfecto si te das cuenta es al
00:19:01
revés volteado como dice un dicho
00:19:02
mexicano exactamente lo que está acá
00:19:04
pero de en método inverso digámoslo así
00:19:08
y después simplemente temporal lo vamos
00:19:11
a apuntar a rotación derecha y le
00:19:14
enviamos el parámetro hace y simplemente
00:19:17
retornamos temporales
00:19:21
that's ok or white hasta ahí está pues
00:19:24
hasta que llegamos tenido en el cual
00:19:26
prácticamente vimos la primera parte de
00:19:28
lo que es la implementación de el ave l
00:19:31
en el siguiente vídeo tutorial
00:19:32
vamos a ver cómo insertar a partir de
00:19:36
otro método llamado insertar abel y
00:19:38
lógicamente ya verla
00:19:40
cappa presentación que es la que tenemos
00:19:42
desde acá es donde vamos a correr toda
00:19:44
nuestra aplicación y pues hasta aquí
00:19:46
dejamos la parte número 1 y nos vemos en
00:19:49
el que sigue que es la parte número 2