A binært søketre er en datastruktur der registreringer av data , som kalles "noder " har pekere til andre noder , kalt " barn ". Dette gir nodene , da tegnes ut , en form som ligner på et slektstre . Noder mottar sin sted i treet basert på om de skulle evalueres som er større enn eller mindre enn andre noder . Venstre barn er alltid mindre enn foreldrene deres, høyre barn alltid more.Binary søk trær er viktige i informatikk fordi de kan være både sortert og søkte i gjennomsnitt i O ( n log n ) tid . Du trenger
Compiler
Eksisterende binært søketre
Vis flere instruksjoner
en
Lag en butikk funksjon som mottar rotnoden . Når du handler med trær i informatikk , vil den mest effektive algoritmen nesten alltid være rekursiv og lagring av treet til en fil vil ikke være noe unntak . Her er et eksempel skjelett av den rekursive butikken funksjon ( i Java) . Public void butikken ( Node n ) kaster IOException { ... }
2
skrive data på rotnoden til fil . Dette vil bruke "pre -order traversering " (Root , Venstre Child, Høyre Child ) for å gå gjennom alle nodene i treet , fordi denne metoden for traversering vil gjøre det lettest å rekonstruere tre fra rekkefølgen av nodene i filen . Den rekursive funksjonen ser nå slik ut : public void butikken ( Node n ) kaster IOException { write ( savefile , n ) ;} butikken skal kalle seg med den venstre Child : public void butikken ( Node n ) kaster IOException { write ( savefile , n ) ; butikken ( n.left ) ;} butikken skal kalle seg med Høyre Child : public void butikken ( Node n ) kaster IOException { write ( savefile , n ) ; butikken ( n.left ), butikk ( n.right ); }
3
Dobbeltsjekk at funksjonen passerer den rekursive sjekkliste. For å forhindre stakkoverflytfeil , sjekk alltid at en rekursiv funksjon oppfyller følgende vilkår: Har funksjonen ha en exit stat? Ja, så lenge treet er ikke av uendelig dybde , til slutt vil det komme en node som har verken venstre eller høyre barn og vil exit.Does den hver iterasjon av funksjonen flytte nærmere avkjørselen staten? Ja , forutsatt at treet ikke er sirkulær og ingen node har en av sine egne forfedre som en barn.Den funksjon passerer sjekkliste .
4
Rekonstruer fra filen. Når det gjelder tid å laste treet tilbake fra filen , vil du bare sette inn hver node i treet som den er lastet fra filen ved hjelp av standard innsetting algoritme . Dette bør starte ved roten og jobbe seg ned ved hjelp av pre -order traversering , plassere den nye noden i den første tomme rom hvor det vil passe . Dette bør rekonstruere tre nøyaktig slik det opprinnelig ble komponert i O ( n log n ) i gjennomsnitt.