Hvordan skrive ut alle bladnoder til et binært tre fra venstre til høyre i JavaScript?

Hvordan Skrive Ut Alle Bladnoder Til Et Binaert Tre Fra Venstre Til Hoyre I Javascript



Et binært tre består av flere noder som er koblet sammen via hjørner, hver node kan være forbundet med maksimalt to underordnede noder som er kjent som dens undernoder. Hvis ' node ' har ingen overordnet node, men inneholder noen underordnede noder som har barnebarnsnoder, da er det kjent som ' rot ' node. Noden er en ' indre ”-noden hvis den har den overordnede noden og den underordnede noden. « blad ” node har en overordnet node, men ingen underordnet node betyr nodene som er blindveien.

Den visuelle representasjonen av de diskuterte konseptene er vist i figuren nedenfor:







Denne veiledningen forklarer prosessen med å skrive ut alle bladnoder i et binært tre ved å dekke de nevnte avsnittene nedenfor:



Hvordan identifisere bladnoder?

« blad ' noder er de som ikke har noen underordnede noder, eller for å være spesifikk som har ' høyde ' av ' 0 '. Hvis noden har en ' høyde ' større enn ' 0 ” så kan den noden være den indre noden eller rotnoden. « blad ”-noder spores vanligvis tilbake for å identifisere den opprinnelige kilden der denne noden er generert. Det brukes mest i søk eller feilsøkende algoritmer for å finne årsaken til en feil eller et problem.



Hvordan skrive ut alle bladnoder til et binært tre fra venstre til høyre i JavaScript?

Det er to tilnærminger ' tilbakevendende ' og ' iterativ ' for å velge alle bladnoder tilgjengelig i det angitte binære treet i ønsket ' venstre ' til ' Ikke sant ' retning. Den praktiske implementeringen av disse tilnærmingene er demonstrert i avsnittene nedenfor:





Metode 1: Skriv ut alle bladnoder i et binært tre fra venstre til høyre rekursivt

Den rekursive tilnærmingen velger alle noder i en dybde-først søkealgoritme måte som først krysser hele venstre sidenodene, deretter midtnoden og høyre sidenodene til slutt. Denne operasjonen utføres rekursivt for hver node, og når det ikke er noen videre kryssing av ' blad ” noder blir identifisert. For bedre å forstå dette konseptet, besøk kodebiten nedenfor:

klasse Node
{
konstruktør ( )
{
dette . innhold = 0 ;
dette . venstre = null ;
dette . Ikke sant = null ;
}
} ;

hvor viser LeafNodes = ( rootNode ) =>
{
hvis ( rootNode == null )
komme tilbake ;

hvis ( rootNode. venstre == null && rootNode. Ikke sant == null )
{
dokument. skrive ( rootNode. innhold + ' ' ) ;
komme tilbake ;
}

hvis ( rootNode. venstre != null )
vise LeafNodes ( rootNode. venstre ) ;
hvis ( rootNode. Ikke sant != null )
vise LeafNodes ( rootNode. Ikke sant ) ;
}
 var provNode = ( val ) =>
{
   var tempNode = ny Node ( ) ;
tempNode. innhold = val ;
tempNode. venstre = null ;
tempNode. Ikke sant = null ;
komme tilbake tempNode ;
}
  var rootNode = provNode ( 3 ) ;
rootNode. venstre = provNode ( 6 ) ;
rootNode. Ikke sant = provNode ( 9 ) ;
rootNode. venstre . venstre = provNode ( 12 ) ;
rootNode. venstre . Ikke sant = provNode ( femten ) ;
rootNode. venstre . Ikke sant . Ikke sant = provNode ( 24 ) ;
rootNode. Ikke sant . venstre = provNode ( 18 ) ;
rootNode. Ikke sant . Ikke sant = provNode ( tjueen ) ;

vise LeafNodes ( rootNode ) ;

Forklaringen av kodeblokken ovenfor er angitt nedenfor:



  • Først oppretter du en klasse som heter ' node ', som oppretter en ny node og setter verdien til ' 0 '. Den vedlagte ' venstre ' og ' Ikke sant ' sidenoder er satt til ' null ' som standard ved å bruke klassekonstruktøren.
  • Definer deretter en ' displayLeafNodes() ' funksjon som aksepterer en enkelt parameter av ' rootNode '. Denne parametriske verdien betraktes som den valgte noden i et binært tre.
  • Inne i funksjonen er ' hvis ' uttalelsen brukes til å sjekke om ' rootNode ' er null eller ikke. I tilfelle av ' null ” den videre kjøringen stoppet for den noden. I det andre tilfellet vil rootNode ' venstre ' og ' Ikke sant ' sidenoder er sjekket for ' null '. Hvis begge er null, verdien av den ' node ' blir skrevet ut.
  • Hvis ' venstre ' eller ' Ikke sant ' noden er ikke 'null', så send den siden av noden til ' displayLeafNodes() ” funksjon for den rekursive operasjonen.
  • Definer en ny funksjon kalt ' provNode() ' som godtar enkeltparameteren til ' val '. Inne i funksjonen oppretter du en ny forekomst av ' Node ' klasse kalt ' tempNode '. Tilordne parameteren ' val ' som verdien for klasseeiendom ' innhold ' og still inn ' venstre ' og ' Ikke sant ' sidenoder til ' null ' som standard.
  • Til slutt lager du et objekt som heter ' rootNode ' for ' provNode() ”-funksjonen og send nodeverdien som denne funksjonsparameteren. Lag venstre og høyre side noder ved å legge til ' venstre ' og ' Ikke sant ' nøkkelord med 'rootNode' og tilordne dem verdi ved å bruke samme funksjon ' provNode() '.
  • « venstre ' betyr den venstre posisjonen til rotnoden og ' venstre.venstre ' posisjon betyr venstre for venstre samme tilnærming brukes i tilfelle ' Ikke sant ' og ' Ikke sant
  • Etter å ha definert treet, send 'rootNode' som et argument for ' displayLeadNodes() ”-funksjon for å velge og skrive ut alle bladnoder i det opprettede treet.

Utdataene generert etter kompileringen bekrefter at bladnoden til det angitte treet har blitt hentet og skrevet ut over konsollen:

Metode 2: Skriv ut alle bladnoder til et binært tre ved å bruke den iterative tilnærmingen

« iterativ ' tilnærming er den mest effektive tilnærmingen, den bruker konseptet ' trykk ' og ' pop ' for å velge ' blad ' noder. Nøkkelpunktene eller virkemåten til denne tilnærmingen er angitt nedenfor:

klasse Node
{
konstruktør ( verdi )
{
dette . data = verdi ;
dette . venstre = null ;
dette . Ikke sant = null ;
}
} ;

hvor viser LeafNodes = ( rootNode ) =>
{
hvis ( ! rootNode )
komme tilbake ;
la liste = [ ] ;
liste. trykk ( rootNode ) ;

samtidig som ( liste. lengde > 0 ) {
rootNode = liste [ liste. lengde - 1 ] ;
liste. pop ( ) ;
hvis ( ! rootNode. venstre && ! rootNode. Ikke sant )
dokument. skrive ( rootNode. data + ' ' ) ;
hvis ( rootNode. Ikke sant )
liste. trykk ( rootNode. Ikke sant ) ;
hvis ( rootNode. venstre )
liste. trykk ( rootNode. venstre ) ;
}
}

 var rootNode = ny Node ( 3 ) ;
rootNode. venstre = ny Node ( 6 ) ;
rootNode. Ikke sant = ny Node ( 9 ) ;
rootNode. venstre . venstre = ny Node ( 12 ) ;
rootNode. venstre . Ikke sant = ny Node ( femten ) ;
rootNode. venstre . Ikke sant . Ikke sant = ny Node ( 24 ) ;
rootNode. Ikke sant . venstre = ny Node ( 18 ) ;
rootNode. Ikke sant . Ikke sant = ny Node ( tjueen ) ;

vise LeafNodes ( rootNode ) ;

Forklaringen av koden ovenfor er skrevet nedenfor:

  • Først lager du en ' Node ' klasse som mottar en enkelt parameter ' verdi ” som er satt som verdien til den nyopprettede noden, og venstre og høyre side er satt til null. Akkurat som gjort i eksemplet ovenfor.
  • Deretter oppretter du en funksjon ' displayLeafNodes() ' som godtar en enkelt parameter av ' rootNode '. Denne 'rootNode' betraktes som det binære treet, og dets tomhet blir først sjekket.
  • Hvis noden ikke er tom, blir en tom liste kalt ' liste ' er opprettet og ' rootNode parameter settes inn i den ved å bruke ' trykk() 'metoden.
  • Og så ' samtidig som() ' brukes som kjøres til lengden av en ' liste '. Inne i løkken, elementet som ligger i bunnen av et tre eller ' liste blir fjernet ved hjelp av pop() 'metoden.
  • Nå, eksistensen av ' venstre ' og ' Ikke sant '-sidene av 'rootNode' er merket, og hvis begge sider ikke eksisterer, betyr det at den ikke har noen barnenode. Deretter blir denne noden vist over skjermen og identifisert som en bladnode.
  • Hvis det er en node på venstre eller høyre side betyr det at den har barn. Så at ' venstre ' og ' Ikke sant '-noden blir skjøvet inn i ' liste ” for videre operasjon for å finne bladnoden.
  • Til slutt oppretter du et tilpasset binært tre ved å sende nodeverdiene som parametere for ' Node ” klassekonstruktør. Etter opprettelsen, send treet 'rootNode' som et argument for ' displayLeafNodes() ' funksjon.

Utdataene generert etter kompileringen viser at bladnodene til det angitte treet skrives ut:

Bonustips: Skriv ut bladnoder til et binært tre fra høyre til venstre retning

For å hente alle bladnoder som ikke har underordnede noder i ' Ikke sant ' til ' venstre ” retning, er den rekursive tilnærmingen den mest anbefalte på grunn av dens lette. For eksempel, det samme treet som er diskutert i avsnittene ovenfor skal brukes til å hente bladnoden, men i ' Ikke sant ' til ' venstre retning, som vist nedenfor:

klasse Node
{
konstruktør ( verdi )
{
dette . data = verdi ;
dette . venstre = null ;
dette . Ikke sant = null ;
}
} ;


funksjon displayLeafNodes ( rot )
{
hvis ( rot == null )
{
komme tilbake ;
}

hvis ( rot. venstre == null && rot. Ikke sant == null )
{
dokument. skrive ( rot. data + ' ' ) ;
komme tilbake ;
}
hvis ( rot. Ikke sant != null )
{
vise LeafNodes ( rot. Ikke sant ) ;
}
hvis ( rot. venstre != null )
{
vise LeafNodes ( rot. venstre ) ;
}
}


 var rootNode = ny Node ( 3 ) ;
rootNode. venstre = ny Node ( 6 ) ;
rootNode. Ikke sant = ny Node ( 9 ) ;
rootNode. venstre . venstre = ny Node ( 12 ) ;
rootNode. venstre . Ikke sant = ny Node ( femten ) ;
rootNode. venstre . Ikke sant . Ikke sant = ny Node ( 24 ) ;
rootNode. Ikke sant . venstre = ny Node ( 18 ) ;
rootNode. Ikke sant . Ikke sant = ny Node ( tjueen ) ;

vise LeafNodes ( rootNode ) ;

Den ovennevnte koden fungerer slik:

  • Først klassen ' Node ” opprettes som bruker standardkonstruktøren til å legge til en ny node i treet bare koblingen som er gjort i eksemplene ovenfor.
  • Deretter ' displayLeadNodes() '-funksjonen er opprettet som aksepterer en enkelt parameter av ' rootNode '. Denne parameteren er sjekket for ' null ' tilstand via ' hvis ' uttalelse.
  • Hvis den oppgitte noden ikke er sann, så er ' venstre ' og ' Ikke sant ' sidenoder er sjekket for ' null ' betingelse. Hvis begge er null, vil noden bli identifisert som en ' blad ”-node og skrives ut over nettsiden.
  • Deretter passerer du ' Ikke sant ' og ' venstre ' noder av ' rootNode ' til ' displayLeafNodes() ' funksjon.
  • Tildel posisjonen til hver node ved å opprette forekomstene ved å bruke ' ny ' nøkkelord og ' Node() ” konstruktør og spesifisere posisjonen som konstruktørparameter.
  • « venstre ' betyr den venstre posisjonen til rotnoden og ' venstre.venstre ” posisjon betyr venstre eller venstre. Den samme tilnærmingen brukes i tilfelle av ' Ikke sant ' og ' Ikke sant '.
  • Til slutt passerer du ' rootNode ' som argument for ' displayLeafNode() ' funksjon.

Den genererte utgangen viser at bladnoder skrives ut i høyre-til-venstre retning.

Det handler om å skrive ut alle bladnoder til et binært tre i hvilken som helst ønsket retning.

Konklusjon

For å skrive ut alle bladnodene til et binært tre, lag en tilfeldig klasse som oppretter og tilordner verdier til trenodene. Deretter oppretter du en tilfeldig funksjon som godtar en enkelt node i treet i et topp-til-bunn-hierarki. Denne funksjonen inneholder flere ' hvis ' betingelser som sjekker om ' node ' er ikke tom og den har ingen noder i ' venstre ' og ' Ikke sant '-retning, så anses den noden som en ' blad ”-noden og vises på konsollen. Denne veiledningen har forklart prosedyren for å skrive ut alle bladnoder i et binært tre fra venstre til høyre eller høyre til venstre.