4. Zuhaitzak informatikan
Egitura mota bat da.
Izena, noski, naturako zuhaitzetatik hartzen du,
amankomunean honako ezaugarriak baititu:
Adarrak == nodo batetik hurrengorako loturak
Erroa == lehenengo nodoa
Hostoak == loturarik gabeko nodoak
5. BST zuhaitzak
Binary Search Tree (BST).
Klasean ikusiko dugun zuhaitz mota da.
Ezaugarriak:
Elementuak ordenean gordetzen ditu (txikienetik
handienera)
Nodo bakoitza bi nodoetara lotuta dago:
Ezkerraldea: elementu txikiago bat duen nodo batekin.
Eskuinaldea: elementu handiago bat duen nodo batekin.
6. Zertarako behar ditugu?
Askotan elementuak gako baten arabera gorde/bilatu
behar dira:
NaN-a
Eskaera baten erreferentzia zenbakia
Produktu baten barra-kodea
Laburbilduz, honetarako behar ditugu zuhaitzak:
Datuak gordetzeko beste egitura bat da (zerrendak bezala)
Berezitasuna: datuak irizpide baten arabera ordenatzen
dira
Irizpide horren arabera berreskuratzerakoan, zerrenda bat
baino arinago bueltatzen ditu
8. BST inplementazioa
Nodo bakoitzak honako elementuak ditu:
Beste elementuekin alderatu ahal dugun elementua
Ezkerraldeko nodoa: elementu txikiagoa duena
Eskuinaldeko nodoa: elementu handiagoa duena
public class NodoA{
private Comparable elementua;
private NodoA ezkerraldekoa;
private NodoA eskuinaldekoa;
...
}
9. BST adibidea
Adibidez, Integer motako elementuak gordetzen baditugu...
11. Zer da Comparable?
Nola alderatu ditzakegu elementuak?
Comparable interfazea erabiliz.
Zer da interfaze bat?
Atributurik gabeko eta metodo abstraktuak baino ez dituen
klase bat bezalakoa da
12. Zertan datza Comparable interfazea?
Zer egin behar dugu klase bat Comparable bihurtzeko?
Metodo bat gainidatzi.
int compareTo(Object o)
Zer egiten du?
this<o bada
0 baino txikiagoa den zenbakia bueltatu
this==o bada
0 bueltatu
this>o bada
0 baino handiagoa den zenbakia bueltatu
13. Javako Comparableak
Integer, Double, String eta hainbat klase betetzen dute
Comparable interfazea.
Horrexegatik era horretako objektuak sartu ahal izango
ditugu gure BSTan
Zenbakiekin errez ulertu ahal da:
(new Integer(1)).compareTo( new Integer(2) ) // < 0
(new Integer(1)).compareTo( new Integer(1) ) // == 0
(new Integer(4)).compareTo( new Integer(3) ) // > 0
String klaseak alfabetikoki ordenatzen ditu hitzak
"bizkaia".compareTo("bizkaia") // == 0
"araba".compareTo("bizkaia") // < 0
"gipuzkoa".compareTo("bizkaia") // >0
14. Comparable klase bat programatzeko
Eta gure klaseak Comparable bihurtzeko?
Adibidez, ikasleak NaN-aren arabera ordenatzen badira...
public class Ikaslea implements Comparable {
private int nan;
private String izena;
...
public int compareTo(Object o) {
Ikaslea ik = (Ikaslea) o;
if( this.nan==ik.nan ) return 0;
if( this.nan<ik.nan ) return -1;
// if( this.nan>ik.nan )
return 1;
}
}
18. Ibilbideak
Zuhaitzeko elementuekin zeozer egiteko, nodoz nodo ibili
behar dugu.
Elementu bat gakoa ez den irizpide baten arabera
bilatzerakoan.
Elementu guztiekin zeozer egiterakoan (adibidez, atributu
bat aldatzeko).
Hori egiteko era desberdinak daude:
Pre-order
In-order
Post-order
19. Lizentzia
Irudien guztien jabetza intelektuala bere egileena* da,
gainontzeko edukiak Creative Commons by-sa 3.0
lizentziapean daude.
* Ian Britton.