Ako vytlačiť všetky listové uzly binárneho stromu zľava doprava v JavaScripte?

Ako Vytlacit Vsetky Listove Uzly Binarneho Stromu Zlava Doprava V Javascripte



Binárny strom pozostáva z viacerých uzlov, ktoré sú prepojené cez vrcholy, pričom každý uzol môže byť spojený najviac s dvoma podriadenými uzlami, ktoré sú známe ako jeho podriadené uzly. Ak „ uzol “ nemá nadradený uzol, ale obsahuje niektoré podriadené uzly, ktoré majú uzly vnukov, potom je známy ako „ koreň “uzol. Uzol je „ vnútorné ” uzol, ak má nadradený uzol a podriadený uzol. ' list ” uzol má nadradený uzol, ale žiadny podriadený uzol znamená uzly, ktoré sú slepou uličkou.

Vizuálne znázornenie diskutovaných konceptov je znázornené na obrázku nižšie:







Táto príručka vysvetľuje proces tlače všetkých listových uzlov binárneho stromu tým, že zahŕňa nižšie uvedené časti:



Ako identifikovať uzliny listov?

' list 'uzly sú tie, ktoré nemajú žiadne podradené uzly, alebo konkrétne, ktoré majú ' výška “z “ 0 “. Ak má uzol „ výška ' väčší než ' 0 “, potom tento uzol môže byť vnútorným uzlom alebo koreňovým uzlom. ' list ” uzly sú zvyčajne spätne sledované, aby sa identifikoval pôvodný zdroj, odkiaľ je tento uzol vygenerovaný. Väčšinou sa používa v algoritmoch vyhľadávania alebo hľadania chýb na nájdenie príčiny chyby alebo problému.



Ako vytlačiť všetky listové uzly binárneho stromu zľava doprava v JavaScripte?

Sú dva prístupy“ rekurzívne “ a „ iteratívny “, aby ste vybrali všetky listové uzly dostupné v poskytnutom binárnom strome v požadovanom „ vľavo “ až “ správny “smer. Praktická implementácia týchto prístupov je demonštrovaná v nižšie uvedených častiach:





Metóda 1: Rekurzívne vytlačte všetky listové uzly binárneho stromu zľava doprava

Rekurzívny prístup vyberie všetky uzly v a hĺbkový vyhľadávací algoritmus spôsobom, ktorý najprv prechádza cez celé ľavé bočné uzly, potom stredný uzol a nakoniec pravé bočné uzly. Táto operácia sa vykonáva rekurzívne pre každý uzol a keď už nedochádza k ďalšiemu prechodu cez „ list „identifikujú sa uzly. Ak chcete lepšie porozumieť tomuto konceptu, navštívte nižšie uvedený útržok kódu:

trieda Uzol
{
konštruktér ( )
{
toto . obsahu = 0 ;
toto . vľavo = nulový ;
toto . správny = nulový ;
}
} ;

kde displayLeafNodes = ( rootNode ) =>
{
ak ( rootNode == nulový )
vrátiť ;

ak ( rootNode. vľavo == nulový && rootNode. správny == nulový )
{
dokument. písať ( rootNode. obsahu + '' ) ;
vrátiť ;
}

ak ( rootNode. vľavo != nulový )
displayLeafNodes ( rootNode. vľavo ) ;
ak ( rootNode. správny != nulový )
displayLeafNodes ( rootNode. správny ) ;
}
bol sampleNode = ( val ) =>
{
bol tempNode = Nový Uzol ( ) ;
tempNode. obsahu = val ;
tempNode. vľavo = nulový ;
tempNode. správny = nulový ;
vrátiť tempNode ;
}
bol rootNode = provNode ( 3 ) ;
rootNode. vľavo = provNode ( 6 ) ;
rootNode. správny = provNode ( 9 ) ;
rootNode. vľavo . vľavo = provNode ( 12 ) ;
rootNode. vľavo . správny = provNode ( pätnásť ) ;
rootNode. vľavo . správny . správny = provNode ( 24 ) ;
rootNode. správny . vľavo = provNode ( 18 ) ;
rootNode. správny . správny = provNode ( dvadsaťjeden ) ;

displayLeafNodes ( rootNode ) ;

Vysvetlenie vyššie uvedeného bloku kódu je uvedené nižšie:



  • Najprv vytvorte triedu s názvom „ uzol “, ktorý vytvorí nový uzol a nastaví jeho hodnotu na „ 0 “. Priložený „ vľavo “ a „ správny “bočné uzly sú nastavené na “ nulový ” štandardne pomocou konštruktora triedy.
  • Ďalej definujte „ displayLeafNodes() ” funkcia, ktorá akceptuje jeden parameter „ rootNode “. Táto parametrická hodnota sa považuje za aktuálne vybraný uzol binárneho stromu.
  • Vo vnútri funkcie je „ ak “ sa používa na kontrolu, či „ rootNode “ je nulové alebo nie. V prípade ' nulový ” ďalšie vykonávanie sa pre tento uzol zastavilo. V druhom prípade rootNode “ vľavo “ a „ správny ' bočné uzly sú kontrolované na ' nulový “. Ak sú obe nulové, hodnota „ uzol “ sa vytlačí.
  • Ak „ vľavo “ alebo „ správny ” uzol nie je “null”, potom odovzdajte túto stranu uzla do “ displayLeafNodes() ” pre rekurzívnu operáciu.
  • Definujte novú funkciu s názvom „ provNode() “, ktorý akceptuje jediný parameter „ val “. Vo vnútri funkcie vytvorte novú inštanciu súboru „ Uzol “trieda s názvom “ tempNode “. Priraďte parametrické „ val ” ako hodnotu pre vlastnosť triedy “ obsahu “ a nastavte „ vľavo “ a „ správny “bočné uzly na “ nulový ' predvolene.
  • Nakoniec vytvorte objekt s názvom „ rootNode ' pre ' provNode() ” a odovzdať hodnotu uzla ako tento parameter funkcie. Vytvorte ľavý a pravý bočný uzol pridaním „ vľavo “ a „ správny ” kľúčové slová s “rootNode” a priraďte im hodnotu pomocou rovnakej funkcie “ provNode() “.
  • ' vľavo “ znamená ľavú pozíciu koreňového uzla a „ vľavo.vľavo “pozícia znamená, že vľavo od ľavej strany sa rovnaký prístup použije v prípade „ správny “ a „ správny
  • Po definovaní stromu odovzdajte „rootNode“ ako argument pre „ displayLeadNodes() ” na výber a tlač všetkých uzlov listov vytvoreného stromu.

Výstup vygenerovaný po kompilácii potvrdzuje, že listový uzol poskytnutého stromu bol načítaný a vytlačený cez konzolu:

Metóda 2: Tlač všetkých listových uzlov binárneho stromu pomocou iteratívneho prístupu

' iteratívny “prístup je najefektívnejší prístup, používa koncept “ TAM “ a „ pop “, aby ste vybrali „ list “uzly. Kľúčové body alebo fungovanie tohto prístupu sú uvedené nižšie:

trieda Uzol
{
konštruktér ( hodnotu )
{
toto . údajov = hodnotu ;
toto . vľavo = nulový ;
toto . správny = nulový ;
}
} ;

kde displayLeafNodes = ( rootNode ) =>
{
ak ( ! rootNode )
vrátiť ;
nech zoznam = [ ] ;
zoznam. TAM ( rootNode ) ;

zatiaľ čo ( zoznam. dĺžka > 0 ) {
rootNode = zoznam [ zoznam. dĺžka - 1 ] ;
zoznam. pop ( ) ;
ak ( ! rootNode. vľavo && ! rootNode. správny )
dokument. písať ( rootNode. údajov + '' ) ;
ak ( rootNode. správny )
zoznam. TAM ( rootNode. správny ) ;
ak ( rootNode. vľavo )
zoznam. TAM ( rootNode. vľavo ) ;
}
}

bol rootNode = Nový Uzol ( 3 ) ;
rootNode. vľavo = Nový Uzol ( 6 ) ;
rootNode. správny = Nový Uzol ( 9 ) ;
rootNode. vľavo . vľavo = Nový Uzol ( 12 ) ;
rootNode. vľavo . správny = Nový Uzol ( pätnásť ) ;
rootNode. vľavo . správny . správny = Nový Uzol ( 24 ) ;
rootNode. správny . vľavo = Nový Uzol ( 18 ) ;
rootNode. správny . správny = Nový Uzol ( dvadsaťjeden ) ;

displayLeafNodes ( rootNode ) ;

Vysvetlenie vyššie uvedeného kódu je napísané nižšie:

  • Najprv vytvorte „ Uzol ”trieda, ktorá prijíma jeden parameter” hodnotu ” ktorá je nastavená ako hodnota novovytvoreného uzla a ľavá a pravá strana sú nastavené na hodnotu null. Rovnako ako vo vyššie uvedenom príklade.
  • Ďalej vytvorte funkciu ' displayLeafNodes() “, ktorý akceptuje jeden parameter „ rootNode “. Tento „rootNode“ sa považuje za binárny strom a najprv sa skontroluje jeho prázdnota.
  • Ak uzol nie je prázdny, zobrazí sa prázdny zoznam s názvom „ zoznam “ je vytvorený a “ rootNode “ sa do nej vloží pomocou „ TAM() “.
  • Potom ' zatiaľ čo() “, ktorý sa vykonáva do dĺžky „ zoznam “. Vo vnútri slučky sa nachádza prvok nachádzajúci sa v spodnej časti stromu alebo „ zoznam “ sa odstráni pomocou “ pop() “.
  • Teraz existencia „ vľavo “ a „ správny ” strany „rootNode“ sú skontrolované a ak obe strany neexistujú, znamená to, že nemá žiadny dcérsky uzol. Potom sa tento uzol zobrazí na obrazovke a identifikuje sa ako listový uzol.
  • Ak je uzol na ľavej alebo pravej strane, znamená to, že má deti. Potom to „ vľavo “ a „ správny 'uzol sa vtlačí do ' zoznam ” pre ďalšiu operáciu hľadania listového uzla.
  • Nakoniec vytvorte vlastný binárny strom odovzdaním hodnôt uzlov ako parametrov pre „ Uzol “konštruktor triedy. Po vytvorení odovzdajte strom „rootNode“ ako argument pre „ displayLeafNodes() “.

Výstup vygenerovaný po kompilácii ukazuje, že listové uzly poskytnutého stromu sú vytlačené:

Bonusový tip: Tlač listových uzlov binárneho stromu sprava doľava

Ak chcete získať všetky listové uzly, ktoré nemajú žiadne podradené uzly v „ správny “ až “ vľavo “ smer, rekurzívny prístup sa najviac odporúča kvôli jeho jednoduchosti. Napríklad ten istý strom, o ktorom sa hovorí vo vyššie uvedených častiach, sa použije na získanie listového uzla, ale v „ správny “ na “ vľavo “ smer, ako je znázornené nižšie:

trieda Uzol
{
konštruktér ( hodnotu )
{
toto . údajov = hodnotu ;
toto . vľavo = nulový ;
toto . správny = nulový ;
}
} ;


funkcia displayLeafNodes ( koreň )
{
ak ( koreň == nulový )
{
vrátiť ;
}

ak ( koreň. vľavo == nulový && koreň. správny == nulový )
{
dokument. písať ( koreň. údajov + '' ) ;
vrátiť ;
}
ak ( koreň. správny != nulový )
{
displayLeafNodes ( koreň. správny ) ;
}
ak ( koreň. vľavo != nulový )
{
displayLeafNodes ( koreň. vľavo ) ;
}
}


bol rootNode = Nový Uzol ( 3 ) ;
rootNode. vľavo = Nový Uzol ( 6 ) ;
rootNode. správny = Nový Uzol ( 9 ) ;
rootNode. vľavo . vľavo = Nový Uzol ( 12 ) ;
rootNode. vľavo . správny = Nový Uzol ( pätnásť ) ;
rootNode. vľavo . správny . správny = Nový Uzol ( 24 ) ;
rootNode. správny . vľavo = Nový Uzol ( 18 ) ;
rootNode. správny . správny = Nový Uzol ( dvadsaťjeden ) ;

displayLeafNodes ( rootNode ) ;

Vyššie uvedený kód funguje takto:

  • Po prvé, trieda „ Uzol ” je vytvorený, ktorý používa predvolený konštruktor na pridanie nového uzla do stromu len odkaz vykonaný vo vyššie uvedených príkladoch.
  • Ďalej, „ displayLeadNodes() “ je vytvorená funkcia, ktorá akceptuje jeden parameter „ rootNode “. Tento parameter sa kontroluje na „ nulový “podmienka cez “ ak “vyhlásenie.
  • Ak zadaný uzol nie je pravdivý, potom jeho „ vľavo “ a „ správny 'skontrolujú sa bočné uzly' nulový “podmienka. Ak sú obe nulové, uzol bude identifikovaný ako „ list a vytlačí sa cez webovú stránku.
  • Potom prejdite „ správny “ a „ vľavo 'uzly ' rootNode “ na “ displayLeafNodes() “.
  • Prideľte polohu každého uzla vytvorením inštancií pomocou „ Nový kľúčové slovo a uzol() ” a špecifikovaním pozície ako parametra konštruktora.
  • ' vľavo “ znamená ľavú pozíciu koreňového uzla a „ vľavo.vľavo ” poloha znamená vľavo alebo vľavo. Rovnaký prístup sa uplatňuje v prípade „ správny “ a „ správny “.
  • Nakoniec prejdite „ rootNode “ ako argument pre „ displayLeafNode() “.

Vygenerovaný výstup ukazuje, že listové uzly sú vytlačené v smere sprava doľava.

To je všetko o vytlačení všetkých listových uzlov binárneho stromu v akomkoľvek požadovanom smere.

Záver

Ak chcete vytlačiť všetky listové uzly binárneho stromu, vytvorte náhodnú triedu, ktorá vytvorí a priradí hodnoty uzlom stromu. Ďalej vytvorte náhodnú funkciu, ktorá akceptuje jeden uzol stromu v hierarchii zhora nadol. Táto funkcia obsahuje viacero „ ak “ podmienky, ktoré kontrolujú, či „ uzol “nie je prázdne a nemá žiadne uzly v poli “ vľavo “ a „ správny “, potom sa tento uzol považuje za “ list “ a zobrazí sa na konzole. Táto príručka vysvetľuje postup tlače všetkých listových uzlov binárneho stromu zľava doprava alebo sprava doľava.