En binær søgning træ er en datastruktur , hvor registreringer af data , kaldet " knuder", har henvisninger til andre knudepunkter , kaldet "børn ". Dette giver knuder , når de tegnes ud , en form, der ligner et stamtræ . Nodes får deres plads i træet baseret på, om de ville vurdere som større end eller mindre end andre noder. Venstre børn er altid mindre end deres forældre , rigtige børn altid more.Binary søgetræer er vigtige i datalogi , fordi de kan være både sorteres og søges i gennemsnit i O (n log n ) tid. Ting du skal
Compiler
Eksisterende binær søgning træ
Vis Flere Instruktioner
1
Opret en butik funktion, der modtager roden node. Når du handler med træer i datalogi, vil den mest effektive algoritme næsten altid være rekursive og opbevaring træet til en fil , vil ikke være nogen undtagelse . Her er et udsnit skelet af rekursive butik funktionen ( i Java) . Public void butik ( Node n ) kaster IOException { ... }
2
skrive data på rodnoden til fil . Dette vil bruge "pre -order traversal " ( Root , Venstre Child , Højre barn) til at gå igennem alle de noder i træet , fordi denne metode af traversal vil gøre det lettest at rekonstruere træet fra rækkefølgen på knuder i filen . Den rekursiv funktion ser nu sådan ud : public void butik ( Node n ) kaster IOException { write ( savefile , n );} Store burde kalde sig med venstre Child : public void butik ( Node n ) kaster IOException { write ( savefile , n ), lager ( n.left );} Store bør kalde sig med den rigtige Child : public void butik ( Node n ) kaster IOException { write ( savefile , n ), lager ( n.left ), lager ( n.right ) ; }
3
Dobbelt -tjek , at funktionen passerer rekursive checkliste. For at forhindre stack overflow fejl , altid kontrollere, at en rekursiv funktion opfylder følgende betingelser : Er funktionen have en exit- stat? Ja , så længe træet ikke er af uendelig dybde , i sidste ende vil nå en node , der hverken har en venstre eller højre barn og vil exit.Does de hver iteration af funktionen flytte tættere på exit staten? Ja , at antage, at træet ikke er cirkelformet , og ingen knude har en af sine egne forfædre som en barnets tarv funktion passerer tjeklisten.
4
Genskab fra filen. Når det drejer sig tid til at indlæse træet tilbage fra filen , vil du blot indsætte hver node i træet , som det er indlæst fra filen ved hjælp af din standard indsættelse algoritme. Dette bør starte ved roden og arbejde sig ned ved hjælp pre-order traversal , placerer den nye node i den første tomme plads , som det vil passe. Dette skulle rekonstruere træet præcis som det oprindeligt blev komponeret i O (n log n ) i gennemsnit.