Está en la página 1de 30

Unidad7

rbolesBinarios

Biblio:AlgoritmosyEstructurasdedatosdeAguilaryMartinez.Unidad14y15
Autor:IngRolandoSimonTitiosky.

rbolesGenerales
Intuitivamenteelconceptoderbolimplica
unaestructuradondelosdatosse
organizandemodoqueloselementosde
informacinestnrelacionadosentresa
travsderamas.

Definicinrecursiva:rbolesun
conjuntodenodosque:
Esvaco,obien,
Tieneunnodorazdelquedescienden
0omssubrboles.

rbolesGenerales
Nodos:conjuntofinitode
elementos.
Ramas:conjuntofinitodelneas
dirigidas,queconectannodos.
GradodelNodo:nmerode
ramasdescendentesconun
nodo.
Raz:primernododeunrbolno
vaco.
Camino:secuenciadenodosen
losquec/nodoesadyacenteal
siguiente.
Soloexiste1caminoentrelaRazy
unNodocualquier.
LadistanciadeunNodoalaRaz
determinalarapidezdebsqueda.

15
6
4

20
10

17

Raiz=15
Nodos:15,6,20.
Ramas(15,6)(20,17)
Gradodel15=G(15)=2
G(10)=0G(20)=2

22

Terminologa
Nivel0

A
B

Nivel1

Nivel2

Padre:tieneNodossucesores.
Hijos:Nodossucesores.
Descendientes:Hijosdeloshijos
Ascendientes:lospadreyabuelos
deunnodohijo.
Hermanos:2omasnodosdel
mismopadre.
Hojas:nodosinhijos.
Niveldeunnodo:distanciaalaraz.
Alturaoprofundidaddeunrbol:
niveldelahojadelcaminomslargo
desdelarazmsuno.

Padres:AByC.
Hijos:DeA(ByC),deB(DyE)
DescendentesdeB:DyE
Laalturadeunrbolvacoes0.
AscendientesdeE:ByA.
Subrbol:cualquierestructura
Hermano:{B,C},{F,G}
conectadapordebajodelraz.
Hojas:D,E,F,G
C/nododeunrboleslarazdeun
subrbolquesedefineporelnodoy
Alturadelrbol:3
todoslosdescendientesdelnodo.
AlturadelSubrboldeB:2

EquilibrioenrbolBinario
FactordeEquilibrio:diferenciadealtura
entrelos2subrbolesdeunnodo.
fe=hdhi.
rbolEquilibrado:1<fe<1.Ej:fe=32=1
rbolPerfectamenteEquilibrado:fe=0.
10

15

17

15

rbolEquilibrado

20
0

20

10

17

22

rbolPerfectamenteEquilibrado

rbolBinario
rboldondeningnnodopuedetenermasde2subrboles.
Encualquierniveln,solopuedecontenerde1a2n+11nodos
rbolCompleto:deAlturan esunrbolenelqueparac/nivel,
del0aln1,estllenodenodos.Todoslosnodoshojaaniveln
ocupanposicionesalaizquierda.
rbol Lleno:tieneelmximonmerodeentradasparasualtura:
2n.ANivel k ,tendr2k+11nodos.(Nivel=Profundidad1)
LlenodeProfundidad3=Nivel2=>22+11nodos=231=7nodos

rbolDegenerado:hayunsolonodohoja(el18)ycadanodono
hojatienesolounhijo.Equivalenteaunalistaenlazada.
15
15

20
20

5
5
99

10
10
4
4

12
12
18
18
Degeneradodeprofundidad4

1
1

32
32
15
15

31
31

6
6

20
20

45
45

6
6
Completodeprofundidad4

4
4

10
10

17
17

Llenodeprofundidad3

22
22

TADrbolBinario:Especificacin
TipodeDato
Nodosdelrbol(seespecificaenfilminasiguiente)

Operaciones

Altura:deunrbol
Borrar:Eliminadelrbolaunnododado
Bsqueda:BuscarunelementoenunrboldeBsqueda
Construir:creaunrbolconunelementorazydosramas.
Copiar:crearunacopiadelrbol
CrearArbol:Iniciaunrbolvaco
Derecho:dalaramaderechadeunrboldado.
Elementos:determinaelnmerodeelementosdelrbol
EsVacio:compruebasielrboltienenodos
Iguales:determinarsidosrbolessonidnticos
Insertar:insertaunnododentrodeunrbol
Izquierdo:dalaramaizquierdadeunrboldado.
Pertenece:Determinasiunelementoperteneceaunrbol.
Recorrer:elrboldeacuerdoalgunosdeloscriterios
Profundidad:determinalaprofundidaddeunrboldado
Raiz:devuelveelnodoraz.
.

EstructuradeDatos
delrbolBinario
TypedefintTipoElemento
Typedefstructnodo
{
TipoElemento
dato
structnodo *izq
structnodo *der
NodoRaz

}Nodo
TypedefNodo*ArbolBinario

A
A

B
B

D
D

null
null

II null
null

C
C

null
null E
E

null
null N
N

null
null

null
null

null
null

H
H null
null

F
F null
null

null
null G
G

null
null

Creacindelrbol
VoidnuevoArbol(ArbolBinario*raz,ArbolBinarioramaIzq,
TipoElementox,ArbolBinarioramaDer)
{ *raiz=crearNodo(x)
(*raz)>izq=ramaIzq
(*raz)>der=ramaDer
}
raiz

ArbolBinariocrearNodo(TipoElementox)
{ ArbolBinarioa
a=(ArbolBinario)malloc(sizeof(Nodo))
a.dato=x
a.Izq=a.Der=NULL
returna
}

a
null
null x
x

null
null

Ejemplotrivial
ArbolBinarioraz,a1,a2
Pilapila
nuevoArbol(&a1,NULL,Maria,NULL)
nuevoArbol(&a2,NULL,Rodrigo,NULL)
nuevoArbol(&raiz,a1,Esperanza,a2)
Insertar(&pila,raz)
nuevoArbol(&a1,NULL,Any,NULL)
nuevoArbol(&a2,NULL,Abel,NULL)
nuevoArbol(&raiz,a1,Jesus,a2)
Insertar(&pila,raz)
a2=quitar(&pila)
a1=quitar(&pila)
nuevoArbol(&raiz,a1,Esperanza,a2)
raiz

Esperan
Esperan
za
za

Espera
Espera
nza
nza

a1
null
null Maria
Marianull
null

VoidnuevoArbol(ArbolBinario*raz,
ArbolBinarioramaIzq,TipoElementox,
ArbolBinarioramaDer)

a2

null
null Rodri
Rodrinull
null
go
go

Jesus
Jesus

null
null

Any
Any null
null

null
null Abel
Abel null
null

Recorridodelrbol
Recorrerelrbolsignificaquecadanodoseaprocesado
unavezysolounaenunsecuenciadeterminada.
Existen2enfoquesgenerales
RecorridoenProfundidad:elprocesoexigealcanzarlas
profundidadesdeuncaminodesdelarazhaciaeldescendiente
maslejanodelprimerhijo,antesdeproseguirconelsegundo.
RecorridoenAnchura:elprocesoserealizahorizontalmente
desdelarazatodossuhijosantesdepasarconla
descendenciadealgunodeellos.

PreordenRID
RaizIZQDER

EnOrdenIRD
IZQRaizDER

PostOrdenIDR
IZQRaizDER

RecorridoPreOrden(RID)
voidpreOrden(ArbolBinarioraz)
{ if(raiz)
{ visitar(raiz>dato)
preOrden(raiz>izq)
preOrden(raiz>der)
}
voidvisitar(TipoElementox)
{printf(%i,x)}
}
15
ElrecorridoenPreOrdendel
rboleselsiguiente:
15,6,4,10,20,17,22
6
20
4

10

17

22

RecorridoEnOrden(IRD)
voidenOrden(ArbolBinarioraz)
{ if(raiz)
{ enOrden(raiz>izq)
visitar(raiz>dato)
enOrden(raiz>der)
}
}
ElrecorridoenEnOrdendelrbol
eselsiguiente:
4,6,10,15,17,20,22
6
4

15
20
10

17

22

RecorridoPostOrden(IDR)
voidPostOrden(ArbolBinarioraz)
{ if(raiz)
{ PostOrden(raiz>izq)
PostOrden(raiz>der)
visitar(raiz>dato)
}
}
ElrecorridoenPostOrdendel
rboleselsiguiente:
4,10,6,17,22,20,15
4

15
6

20
10

17

22

ComparemosRecorridos
PreOrdenRID

18

18,12,5,9,28,20,35

EnOrdenIRD

12

28

5,9,12,18,20,28,35

PostOrdenIDR
9,5,12,20,35,28,18

20
9

rbolBinariodeBsqueda
ComoenelEjemplo,dadounNodocualquieradelrbol,
todoslosdatosdesuSubrbolIZQsonmenores,ylosdel
SubrbolDERsonmayores:I<R<D:Poresto,soloel
recorridoIRD,darlasecuenciaordenadadelrbol.

35

ProfundidaddeunrbolBinario
intprofundidad(ArbolBinarioraz)
{ if(!raiz) return0/*rbolvaco*/
else
{ intprofundidadI=profundidad(raiz>izq)
intprofundidadD=profundidad(raz>der)
if(profundidadI>profundidadD)
returnprofundidadI+1
else
returnprofundidadD+1
}
}
Alturaoprofundidaddeunrbol:niveldelahojadelcaminomslargo
desdelarazmsuno.Laalturadeunrbolvacoes0.

Creacindeunrbol
BinariodeBsqueda
Sedeseanalmacenarlosnmeros8,3,1,20,
10,5y4enunrbolBinariodeBsqueda.
LanicaReglaesqueI<R<D.
Inicialmenteelrbolestvacoylanicaopcin
parael8esserelNodoRaz.
Luegoviene3,esmenora8:vaalsubrbolIZQ
Luegoel1,menoral8yal3.
8
8

8
8

8
8
3
3
3
3

y<x

Z>x

1
1

Creacindeunrbol
BinariodeBsqueda(cont.)
Sedeseanalmacenarlosnmeros8,3,1,20,10,5y4
enunrbolBinariodeBsqueda.
Luegoel20,mayoral8
Ashastainsertartodosloselementos.
PROPIEDADdelosrbolesBinariosdeBsqueda:
Nosonnicosydependedelordenenelcualsefueron
insertandoloselementos
8
8
3
3
1
1

8
8
20
20

3
3
1
1

20
20

10
10

8
8

8
8
3
3
1
1

3
3

20
20
5
5

10
10

1
1

20
20
5
5

44

10
10

BsquedaenrboldeBsqueda
Nodo*buscar(Nodo*raiz,TipoElementobuscado)
{
if(!raiz)
return0 /*rbolvaco*/
else if(buscado==raiz>dato)returnraiz
else if(buscado<raiz>dato)
returnbuscar(raiz>izq,buscado)
else
returnbuscar(raiz>der,buscado)
}

InsertarenrbolesdeBsqueda
EsunaextensindelaoperacindeBsqueda
Sielrbolestvacoseinsertadirectamente
SINO:BuscarenelrbolellugarcorrectodeInsercin

voidinsertar(Nodo**raiz,TipoElementodato)
{ if(!(*raiz))
*raiz=crearNodo(dato)
elseif(dato<(*raiz)>dato)
insertar(&((*raiz)>izdo),dato)
else
insertar(&((*raiz)>dcho),dato)
}

EliminardeunrbolBinariodeBsqueda
Esunaextensindelaoperacindebsqueda.
MantendrlaestructuraderbolBinariode
Bsqueda.
Presenta2casosbiendiferenciados
1er:ElNodoaeliminaresHojaoHijonico
SeAsignaralPadredelnodoaeliminar,sunico
descendiente.(ElAbueloseencargardelNieto)

2do:Elnodoaborrartienesusdoshijos.SePuede
ReemplazareldatodelnodoconelMenordelasClaves
MayoresdelSubrbolDerecho.
ReemplazareldatodelnodoconelMayordelasClaves
MenoresdelSubrbolIzquierdo.
Bajaremosal1ernododelaRamaIzquierda
Comolaclavemayorestaladerecha,secontinabajandoa
derechahastaencontrarunnodohoja(ElMayordelos
Menoresquereemplazareldatoaeliminar).

EliminardeunrbolBinariode
8
8
Bsqueda
EliminarelNodo8.
Bajaremosal1ernododela
RamaIzquierda:Nodo3
Comolaclavemayorestasu
derecha,secontinabajandoa
derechahastaencontrarun
nodosinramaDER:Elnodo5.
Sereemplazael8porel5.
QuedauncasodeHijonico.
ElAbuelo(3)seencargardel
Nieto(4).

3
3
1
1

20
20
10
10

5
5
4
4
5
5
3
3

1
1

20
20
??
??

10
10

4
4
55
3
3
1
1

20
20
4
4

10
10

EliminardeunrbolBinariodeBsqueda
voideliminar(Nodo**r,TipoElemento
dato)
{ if(!(*r))puts("Nodonoencontrado")
elseif(dato<(*r)>dato)
eliminar(&(*r)>izdo,dato)
elseif(dato>(*r)>dato)
eliminar(&(*r)>dcho,dato)
else /*Nodoencontrado*/
{
Nodo*q/*punteroalnodoasuprimir*/
q=(*r) /*reselptrdelnodoPadre*/
if(q>izdo==NULL)
(*r)=q>dcho
elseif(q>dcho==NULL)
(*r)=q>izdo
else/*tieneramaizquierdayderecha*/
reemplazar(&q)
free(q)
}
}

voidreemplazar(Nodo**act)
{ Nodo*a,*p
p=*act
a=(*act)>izdo/*menoresaIZQ*/
while(a>dcho)
{
p=a/*buscamoselMayoraDER*/
a=a>dcho
}
/*CambiodeCampoDatos*/
(*act)>dato=a>dato
/*AlAbuelop,sehacecargodenietoIZQ*/

if(p==(*act))
p>izdo=a>izdo
else
p>dcho=a>izdo
(*act)=a
}/*Ojo:NopuedetenernadaaDerecha,
puesabramosbajadoenelwhile.*/

AVL: rbolBinario
OrdenadoyBalanceado
Considerandoaunrboldennodos.
EficienciaenBsquedasenrbolesEquilibradosF(n)=Logn
Enlosdems:logn<=F(n)<=n

ParaOptimizarlasBsquedas,seintentarmantener
losrbolesBinariosOrdenadosI<R<DyEquilibrados.
LlamadosrbolesAVL (AdelsonVelskiiLandis)
SecaracterizanporquelaAlturaB=hdhi :1<=B<=1
RestringelaalturadecadaunodelosSubrboles
SenecesitauncampoFE(FactordeEquilibrio)encadanodo.
structnodo
{

}Nodo

TipoElemento dato
intfe
structnodo
*izq,*der

InsercinenAVL
LaInsercinsehacesiguiendoelcaminodebsqueda
Puedeaumentarlaalturadeunarama,demaneraque
cambieelfactordeequilibriodedichonodo.
Implicaqueseretornarporelcaminodebsquedapara
actualizarelFEdec/nodo
SepuedellegaraDesbalancear(Altura=2)=>ReBalanceo.
OPuedemejorar:SialrbolXseleInsertael3,resultaren
PerfectamenteBalanceado.

ElProcesoterminacuandosellegaalaRaizocuando
terminaelRebalanceodelmismo.
hIZQ
3

hDER
3

10

hIZQ
4

10
10

17
6

hDER
3

15
rbolx

20

2
5
1 5

17
17

4
4
6
6
1

15
15

rbolx+Nodo5

20
20

1
0

ReestructuracinAVL
Hay4casosposiblesatenerencuenta,segndondese
hizolaInsercin.
A
A
A
A

1.Insercinenel
SubrbolIZQDela
RamaIZQdeA
3.InsercinenelSubrbol
DER
DelaRamaDERdeA

A
A

2.InsercinenelSubrbolDER
DelaRamaIZQdeA
4.InsercinenelSubrbol
DERDelaRamaIZQdeA

A
A

Solucin:LaROTACIONledevuelveelequilibrioalrbol.
RotacinSimple:Caso1y3:ImplicaaAysudescendiente
RotacinDoble:Caso2y4:Implicaalos3nodos

Solucionessimtricas:Enc/caso,lasramasestn
opuestas.

AVL:RotacinSimple
LuegodeInsertarelNodoAelrbolqued
desbalanceado.
Segnqueramahacrecido,laRotacin
Simplepuedeserdeizquierdaizquierda(II)
oderechaderecha(DD).
MovimientosdePtrs.

n
2

n1

C
C

B
B
A
A

nesptroalnodoproblema:Fe=2
IZQ(nuestroej).N1apuntaaramaIZQ
n>izq=n1>der
n1>der=n
n=n1

n1

0
B
B
0
A
A

DER.N1apuntaaramaDER
n>der=n1>izq
n1>izq=n
n=n1

C
C

AVL:RotacinDoble
MovimientosdePtrs.
napuntaalnodoproblema(Fe=2)n1al
hijodenconproblemas,n2alhijoden1
DI(nuestroej).Derechaizquierda
n1>izq=n2>der
n2>der=n1
n>der=n2>izq
n2>izq=n
n=n2

Lasolucinconsiste
ensubirel40,pender
el30asuizquierday
el60asuderecha.

ID:izquierdaderecha
n1>der=n2>izq
n2>izq=n1
n>izq=n2>der
n2>der=n
n=n2
n

2
30
30

n2

n1

n2

40
40
30
30

60
60

60
60

n1
40
40
0

EliminacindeunNodoAVL

Luegodeeliminarunnodoconciertaclave,el
rbolresultantedebeseguirsiendoAVL
ElAlgoritmopuededescomponerseendos
partesbiendiferenciadas
1. EliminarelNodo:segnlaestrategiaquevimosen
laEliminacindeNodoenrboldeBsqueda
2. Balancear:sedebeseguirelcaminodebsqueda
ensentidoinverso:
2.1.ArreglandoelFactordeEquilibrio
2.1.RestaurarelEquilibrioalldondeserompe.

TrabajosPrcticosUnidad7
COMOMINIMO,REALIZAR:
DelaBibliografa
DelCapitulo14:
Ejercicios:14.1al14.8,14.11
Problemas:14.2,14.3,14.7

DelCapitulo15:
Ejercicios:15.1,15.6,15.10
Problemas:15.1

Complementarios:
Equilibrarlosrbolesde14.1al14.8,14.11

También podría gustarte