Árboles

Anuncio
ÉUEROHV
&DUORV'HOJDGR.ORRV
,QJHQLHUtD7HOHPiWLFD
8QLY&DUORV,,,GH0DGULG
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
1
'HILQLFLyQQRUHFXUVLYD
❚ 8QiUEROFRQVLVWHHQXQFRQMXQWRGH
QRGRV\XQFRQMXQWRGHDULVWDVGH
IRUPDTXH
❙ 6HGLVWLQJXHXQQRGROODPDGRUDt]
❙ $FDGDQRGRKH[FHSWRODUDt]OHOOHJDXQD
DULVWDGHRWURQRGRS
S SDGUH GHK KXQRGHORVKLMRVGHS
❙ 3DUDFDGDQRGRKD\XQFDPLQR VHFXHQFLD
GHDULVWDV~QLFR GHVGHODUDt]
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
2
1
(MHPSOR
Raíz (sin padre)
El padre de h
S
Un hijo de p
hermano
de h
K
Hojas
(sin hijos)
Hojas
(sin hijos)
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
3
(MHPSOR
Raíz (sin padre)
El padre de h
S
Un hijo de p
hermano
de h
K
Hojas
(sin hijos)
Copyright © 2001 cdk@it.uc3m.es
Hojas
(sin hijos)
Java: Árboles /
4
2
'HILQLFLyQUHFXUVLYD
❚ 8QiUEROHV
❙ 8QQRGR
❙ RXQQRGR\VXEiUEROHVFRQHFWDGRVFRQHO
QRGRSRUPHGLRGHXQDDULVWDDVXUDt]
No incluye
al árbol vacío
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
5
'HILQLFLyQUHFXUVLYD
❚ 8QiUEROHV
❙ YDFtR
❙ RXQQRGR\FHURRPiVVXEiUEROHVQRYDFtRV
FRQHFWDGRVFRQHOQRGRSRUPHGLRGHXQD
DULVWDDVXUDt]
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
6
3
(MHPSORV
❚ 8QVLVWHPDGHILFKHURV
❚ /DHVWUXFWXUDGHXQGRFXPHQWRFDStWXORV
DSDUWDGRVVXEDSDUWDGRV
❚ 8QiUEROGHGHFLVLyQ
❚ 8QiUEROJHQHDOyJLFR
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
7
Java: Árboles /
8
Copyright © 2001 cdk@it.uc3m.es
4
&LWD
❚ 7KHVWUXFWXUHRIFRQFHSWVLVIRUPDOO\FDOOHGD
KLHUDUFK\ DQGVLQFHDQFLHQWWLPHVKDVEHHQD
EDVLFVWUXFWXUHIRUDOOZHVWHUQNQRZOHGJH
.LQJGRPVHPSLUHVFKXUFKHVDUPLHVKDYHDOO
EHHQVWUXFWXUHGLQWRKLHUDUFKLHV7DEOHVRI
FRQWHQWVRIUHIHUHQFHPDWHULDODUHVRVWUXFWXUHG
PHFKDQLFDODVVHPEOLHVFRPSXWHUVRIWZDUHDOO
VFLHQWLILFDQGWHFKQLFDONQRZOHGJHLVVR
VWUXFWXUHG
5REHUW 03LUVLJ=HQDQG
WKH$UWRI0RWRUF\FOH0DLQWHQDQFH
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
9
7HUPLQRORJtD
❚ 8QQRGRHVH[WHUQRVLQRWLHQHKLMRVHVKRMD
❚ 8QQRGRHVLQWHUQRVLWLHQHXQRDPiVKLMRV
❚ 8QQRGRHVDVFHQGLHQWHGHRWURVLHVSDGUH
GHpORDVFHQGLHQWHGHVXSDGUH
❚ 8QQRGRHVGHVFHQGLHQWH GHRWURVLHVWHHV
DVFHQGLHQWHGHOSULPHUR
❚ /RVGHVFHQGLHQWHVGHXQQRGRGHWHUPLQDQXQ
VXEiUERO HQHOTXHHVHQRGRKDFHHOSDSHOGH
UDt]
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
10
5
7HUPLQRORJtD
❚ 8QiUEROHVRUGHQDGRVLSDUDFDGDQRGR
H[LVWHXQRUGHQOLQHDOSDUDWRGRVVXV
KLMRV
❚ 8QiUEROELQDULR HVXQiUERORUGHQDGR
HQHOTXHFDGDQRGRWLHQH RKLMRV
HOKLMRL]TXLHUGR\HOGHUHFKR
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
11
7HUPLQRORJtD
❚ 8QFDPLQR GHXQQRGRDRWURHVXQD
VHFXHQFLDGHDULVWDVFRQVHFXWLYDVTXH
OOHYDQGHOSULPHURDOVHJXQGR6XORQJLWXG
HVHOQ~PHURGHDULVWDVTXHWLHQH
❚ /DSURIXQGLGDG GHXQQRGRHVOD
ORQJLWXGGHOFDPLQRGHODUDt]DHVHQRGR
❚ /DDOWXUD GHXQiUEROHVODSURIXQGLGDG
GHOQRGRPiVSURIXQGR
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
12
6
$OJRULWPRVEiVLFRV
❚
❚
❚
❚
7DPDxRQ~PHURGHQRGRV
3URIXQGLGDGGHXQQRGR
$OWXUD
5HFRUULGRV
❙ (XOHU
❙ 3UHLQ \SRVWRUGHQ
❚ 6XSRQHPRViUEROHVELQDULRVSDUD
VLPSOLILFDU
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
13
&ODVH1RGRELQDULR
class NodoB {
Object d;
NodoB izq;
NodoB der;
NodoB() {this(null);}
NodoB(Object o) {this(o,null,null);}
NodoB(Object o, NodoB i, NodoB d)
{d=o; izq=i; der=d;}
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
14
7
&ODVH1RGRELQDULR
static int size (NodoB a){...;}
static int height (NodoB a){...;}
void preorder (NodoB a){...;}
void inorder (NodoB a){...;}
void postorder (NodoB a){...;}
}
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
15
&ODVHÉUEROELQDULR
class ArbolB {
protected NodoB raiz;
ArbolB() {raiz=null;}
ArbolB(Object o){raiz=new NodoB(o);}
public int size()
{return NodoB.size(raiz);}
public int height()
{return NodoB.height(raiz);}
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
16
8
&ODVHÉUEROELQDULR
public void preorder ()
{if (raiz!=null) raiz.preorder();}
public void inorder ()
{if (raiz!=null) raiz.inorder();}
public void postorder ()
{if (raiz!=null) raiz.postorder();}
}
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
17
7DPDxR
static int size (NodoB a){
if (a==null)
return 0;
else
return 1+size(a.izq)+size(a.der);
}
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
18
9
$OWXUD
static int height (NodoB a){
if (a==null)
return (-1);
else
return 1+Math.max(height(a.izq),
height(a.der));
}
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
19
Java: Árboles /
20
5HFRUULGRGH(XOHU
Copyright © 2001 cdk@it.uc3m.es
10
5HFRUULGRSUHRUGHQ
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
21
5HFRUULGRSRVWRUGHQ
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
22
11
5HFRUULGRLQRUGHQ
VLPpWULFR
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
23
Java: Árboles /
24
SUHRUGHQ
void preorder (){
System.out.println(d);
if (izq != null)
izq.preorder();
if (der != null)
der.preorder();
}
Copyright © 2001 cdk@it.uc3m.es
12
SRVWRUGHQ
void postorder (){
if (izq != null)
izq.postorder();
if (der != null)
der.postorder();
System.out.println(d);
}
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
25
Java: Árboles /
26
LQRUGHQ
void inorder (){
if (izq != null)
izq.inorder();
System.out.println(d);
if (der != null)
der.inorder();
}
Copyright © 2001 cdk@it.uc3m.es
13
$%&²'
$
²
%
&
Copyright © 2001 cdk@it.uc3m.es
'
Java: Árboles /
27
(MHPSOR
,QILMR
3UHILMR
3RVILMR
$%
$%
$%
$%±&
±$%&
$%&±
$%&±'
$%±&'
$%&'±
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
28
14
1RWDFLyQSRVWILMR
❚ &DOFXODGRUDV+3
❚ 3LODSDUDDOPDFHQDURSHUDQGRV
❚ (M± Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
29
3URSLHGDGHVGH
iUEROHVELQDULRV
❚ 6HD
❙
❙
❙
❙
(
,
1
+
1~PHURGHQRGRVH[WHUQRV
1~PHURGHQRGRVLQWHUQRV
7DPDxR (,
$OWXUD
❚ 6HFXPSOH
❙ ( ,
❙ +è(è+
+è,è+
❙ ORJ1è+è1
Copyright © 2001 cdk@it.uc3m.es
+è1è+
Java: Árboles /
30
15
,PSOHPHQWDFLRQHV
❚ %DVDGDHQVHFXHQFLD
❚ %DVDGDHQHVWUXFWXUDHQOD]DGD
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
31
,PSOHPHQWDFLyQ
EDVDGDHQVHFXHQFLD
Copyright © 2001 cdk@it.uc3m.es
SUDL] S[L]T S[
S[GHU S[
Java: Árboles /
32
16
,PSOHPHQWDFLyQ
EDVDGDHQHQODFHV
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
33
ÉUEROHVELQDULRV
GHE~VTXHGD
❚ 8QiUEROELQDULRGHE~VTXHGD HVXQ
iUEROELQDULRHQHOTXHSDUDFDGDQRGRQ
❙ WRGDVODVFODYHVGHORVQRGRVGHO
VXEiUEROL]TXLHUGR VRQ
PHQRUHVTXHODFODYHGHQRLJXDOHV
❙ \WRGDVODVGHOVXEiUEROGHUHFKR
PD\RUHVRLJXDOHV
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
34
17
(MHPSOR
”
•
•
•
•
”
•
”
”
1
2
3
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
35
(MHPSOR
”
”
”
Copyright © 2001 cdk@it.uc3m.es
•
•
•
•
”
1
2
3
4
Java: Árboles /
36
18
2SHUDFLRQHV
❚ %~VTXHGD
❚ ,QVHUFLyQ
❚ (OLPLQDFLyQ
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
37
%~VTXHGD
%XVFDPRVHO³´
‡ 6XEiUERO L]TXLHUGR
‡ ! 6XEiUERO GHUHFKR
‡ (OHPHQWR HQFRQWUDGR
•
”
•
Copyright © 2001 cdk@it.uc3m.es
”
•
”
•
”
Java: Árboles /
38
19
,QVHUFLyQ
•
7
9
2
1
Nos desplazamos dependiendo del
resultado de la comparación,
cuando lleguemos a una hoja
insertamos.
– Si la clave del elemento a insertar
coincide con la del nodo raíz el
elemento a insertar sustituye al
que había
– Si es menor buscamos en el
subárbol izquierdo
– Si es mayor buscamos en el
subárbol derecho
– Si llegamos a un nodo degenerado
5
3
6
– Si es menor insertamos a la
izquierda
– Si es mayor insertamos a la
derecha
Ejemplo insertar el 6
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
39
(OLPLQDFLyQ
7
7
•
9
2
1
5
1
Elimino el 5 (1 hijo)
3
9
2
3
7
9
2
1
5
3
7
9
3
1
5
Es complicado ya que los nodos
internos mantienen al árbol
conectado. Para eliminar:
– Si se trata de una hoja se
elimina directamente
– Si tiene un único hijo se
elimina el nodo haciendo que
su nodo padre pase a
referenciar a su nodo hijo
– Si tiene dos hijos :
– Se sustituye el nodo por el
menor elemento de su
subárbol derecho
– Se elimina el nodo
correspondiente a dicho
menor elemento
Elimino el 2 (2 hijos)
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
40
20
ÉUEROHV$9/
❚ 8QiUERO$9/ HVXQiUEROELQDULRGH
E~VTXHGDHQHOFXDOSDUDFDGDQRGRODV
DOWXUDVGHORVVXEiUEROHVGLILHUHQDOR
VXPRHQXQR
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
41
0RQWtFXORV+HDSV
❚ 8QPRQWtFXOR HVXQiUEROELQDULRHQHO
TXHSDUDFDGDQRGRQH[FHSWRSDUDHO
UDt]VXFODYHHVPD\RURLJXDOTXHODGH
VXSDGUH
❚ 6LUYHSDUDODLPSOHPHQWDFLyQGHFRODVFRQ
SULRULGDG
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
42
21
(MHPSOR
Copyright © 2001 cdk@it.uc3m.es
Java: Árboles /
43
Java: Árboles /
44
2WURViUEROHV
❚ ÈUEROURMLQHJUR
❚ ÈUEROHV$$
❚ ÈUEROHV%
Copyright © 2001 cdk@it.uc3m.es
22
Descargar