Hoewel Java biedt geen binaire boom klasse in de standaard bibliotheken , een fundamentele binaire boom klasse is eenvoudig genoeg om te worden gepresenteerd. A " traversal " een gegevensstructuur is een algoritme dat elk knooppunt keer bezoekt . Dit wordt vaak uitgevoerd als een soort iterator ( net als een lijst iterator ) of methode die een callback-methode voor elk knooppunt zullen noemen . Op Java , om een " postorder " traversal , die een bezoek aan de wortelknoop laatste doen , geen terugbellen of iteratoren zijn noodzakelijk . De traversal functie zal eenvoudig elk knooppunt het bezoeken aan de console af te drukken . Instructies 1 Schrijf een fundamentele binaire zoekboom klasse . Er zijn slechts twee methoden die moeten in dit stadium te worden ondersteund : een basis constructeur die het knooppunt waarde , en een insert methode initialiseert . De insert methode zal een boom doorkruisen en maak een nieuw knooppunt op de juiste plaats . " " public class BinaryTree { BinaryTree links; BinaryTree rechts; int waarde ; openbare BinaryTree ( int v ) { waarde = v ; } //Plaats een waarde in de boom public void insert ( int v ) { if ( v if ( links = = null ) links = new BinaryTree ( v ) ; anders left.insert ( v ) ; } else if ( v > value ) { if ( rechts == null ) rechts = new BinaryTree ( v ) ; anders right.insert ( v ) ; . } } " " kopen van 2 Maak een instantie van de binaire boom waarvan de wortel knooppunt zal zijn Elk knooppunt , zelfs de wortel knooppunt , moet een waarde < br . > 3 Kies een waarde voor de root- knooppunt dat is ergens in het midden van de objecten die je zult opslaan . bijvoorbeeld, als je het opslaan van een gelijkmatige verdeling van de getallen van 1 tot 100 , 50 is een goede keuze voor de wortel knooppunt Binary bomen moeten zo evenwichtig mogelijk , omdat onevenwichtige bomen groeien zeer hoog en zijn niet erg effectief " " BinaryTree b = new BinaryTree ( 50 ) ; " . '. Insert 4 sommige nodes in de boom . Omdat deze boom is niet auto - balancing , om het evenwicht te behouden , knooppunten moet worden in een bepaalde volgorde geplaatst . de volgorde in dit voorbeeld code is gemaakt om de kortste en meest efficiënte structuur mogelijk te maken . " " b . inzetstuk ( 20 ) ; b.insert ( 40 ) ; b.insert ( 10 ) ; b.insert ( 5 ) ; b.insert ( 45 ) ; b.insert ( 70 ) ; b.insert ( 60 ) ; b.insert ( 80 ) ; b.insert ( 55 ) ; b.insert ( 85 ) " " 5 Verplaats de boom , doorkruisen de linker boom , gevolgd door de juiste boom , en uiteindelijk de wortelknoop . Als recursie wordt gebruikt voor het doen van de postorder traversal , de methode is slechts drie regels lang . In dit geval zal de stapel alleen maar groeien tot de hoogte van de boom . Omdat de boom is evenwichtig en klein , recursie zal niet overstromen de stapel . 6 Voeg een nieuwe methode om de BinaryTree klasse met de naam postorder . hier , het drukt alleen de waarde van elk knooppunt het bezoekt . " " public void postorder ( ) { if ( links ! = null ) left.postorder ( ) if ( rechts = null ) right.postorder ( ) ; ! System.out.println ( waarde ) ;} " " 7 Print de knooppunten in postorder door te bellen naar de b.postorder methode na uw inserts " " b.postorder ( ) ; " .
|