Vizuální znázornění diskutovaných konceptů je znázorněno na obrázku níže:
Tato příručka vysvětluje proces tisku všech listových uzlů binárního stromu tím, že pokryje níže uvedené části:
- Jak identifikovat uzly listů?
- Jak vytisknout všechny listové uzly binárního stromu zleva doprava v JavaScriptu?
- Bonusový tip: Tisk listových uzlů binárního stromu zprava doleva
- Závěr
Jak identifikovat uzly listů?
' list 'uzly jsou ty, které nemají žádné podřízené uzly, nebo konkrétně, které mají ' výška “ z “ 0 “. Pokud má uzel „ výška ' větší než ' 0 ” pak tento uzel může být vnitřním nebo kořenovým uzlem. ' list ” uzly jsou obvykle zpětně sledovány, aby se identifikoval původní zdroj, odkud je tento uzel generován. Většinou se používá v algoritmech vyhledávání nebo hledání chyb k nalezení příčiny chyby nebo problému.
Jak vytisknout všechny listové uzly binárního stromu zleva doprava v JavaScriptu?
Jsou dva přístupy' rekurzivní ' a ' iterativní “ pro výběr všech listových uzlů dostupných v poskytnutém binárním stromu v požadovaném “ vlevo, odjet “ až “ že jo “směr. Praktická implementace těchto přístupů je demonstrována v níže uvedených částech:
- Vytisknout všechny listové uzly binárního stromu zleva doprava rekurzivně
- Tisk všech listových uzlů binárního stromu pomocí iterativního přístupu
Metoda 1: Tisk všech listových uzlů binárního stromu zleva doprava rekurzivně
Rekurzivní přístup vybere všechny uzly v a hloubkový vyhledávací algoritmus způsobem, který nejprve projde celé levé postranní uzly, poté střední uzel a nakonec pravé postranní uzly. Tato operace se provádí rekurzivně pro každý uzel a pokud již nedochází k dalšímu procházení „ list “ jsou identifikovány uzly. Chcete-li lépe porozumět tomuto konceptu, navštivte níže uvedený fragment kódu:
třída Uzel{
konstruktér ( )
{
tento . obsah = 0 ;
tento . vlevo, odjet = nula ;
tento . že jo = nula ;
}
} ;
kde displayLeafNodes = ( rootNode ) =>
{
-li ( rootNode == nula )
vrátit se ;
-li ( rootNode. vlevo, odjet == nula && rootNode. že jo == nula )
{
dokument. napsat ( rootNode. obsah + '' ) ;
vrátit se ;
}
-li ( rootNode. vlevo, odjet != nula )
displayLeafNodes ( rootNode. vlevo, odjet ) ;
-li ( rootNode. že jo != nula )
displayLeafNodes ( rootNode. že jo ) ;
}
byl sampleNode = ( val ) =>
{
byl tempNode = Nový Uzel ( ) ;
tempNode. obsah = val ;
tempNode. vlevo, odjet = nula ;
tempNode. že jo = nula ;
vrátit se tempNode ;
}
byl rootNode = provNode ( 3 ) ;
rootNode. vlevo, odjet = provNode ( 6 ) ;
rootNode. že jo = provNode ( 9 ) ;
rootNode. vlevo, odjet . vlevo, odjet = provNode ( 12 ) ;
rootNode. vlevo, odjet . že jo = provNode ( patnáct ) ;
rootNode. vlevo, odjet . že jo . že jo = provNode ( 24 ) ;
rootNode. že jo . vlevo, odjet = provNode ( 18 ) ;
rootNode. že jo . že jo = provNode ( dvacet jedna ) ;
displayLeafNodes ( rootNode ) ;
Vysvětlení výše uvedeného bloku kódu je uvedeno níže:
- Nejprve vytvořte třídu s názvem „ uzel “, který vytvoří nový uzel a nastaví jeho hodnotu na „ 0 “. Přiložený „ vlevo, odjet ' a ' že jo 'boční uzly jsou nastaveny na' nula ” ve výchozím nastavení pomocí konstruktoru třídy.
- Dále definujte „ displayLeafNodes() 'funkce, která přijímá jeden parametr ' rootNode “. Tato parametrická hodnota je považována za aktuálně vybraný uzel binárního stromu.
- Uvnitř funkce je „ -li “ se používá ke kontrole, zda „ rootNode “ je nulové nebo ne. V případě ' nula ” další provádění se pro tento uzel zastavilo. V druhém případě rootNode ' vlevo, odjet ' a ' že jo 'postranní uzly jsou kontrolovány na' nula “. Pokud jsou oba nulové, hodnota tohoto „ uzel “ se vytiskne.
- Pokud „ vlevo, odjet “ nebo „ že jo “ uzel není „null“, pak předejte tuto stranu uzlu do „ displayLeafNodes() ” funkce pro rekurzivní operaci.
- Definujte novou funkci s názvem „ provNode() “, který přijímá jediný parametr „ val “. Uvnitř funkce vytvořte novou instanci „ Uzel “třída s názvem “ tempNode “. Přiřaďte parametrické „ val ' jako hodnotu pro vlastnost třídy ' obsah “ a nastavte „ vlevo, odjet ' a ' že jo 'postranní uzly k' nula ' ve výchozím stavu.
- Nakonec vytvořte objekt s názvem „ rootNode ' pro ' provNode() ” a předejte hodnotu uzlu jako tento parametr funkce. Vytvořte levý a pravý boční uzel přidáním „ vlevo, odjet ' a ' že jo ” klíčová slova s “rootNode” a přiřaďte jim hodnotu pomocí stejné funkce “ provNode() “.
- ' vlevo, odjet “ znamená levou pozici kořenového uzlu a „ vlevo.vlevo ” pozice znamená vlevo od leva stejný přístup je použit v případě ” že jo ' a ' že jo “
- Po definování stromu předejte „rootNode“ jako argument pro „ displayLeadNodes() ” pro výběr a tisk všech listových uzlů vytvořeného stromu.
Výstup vygenerovaný po kompilaci potvrzuje, že listový uzel poskytnutého stromu byl načten a vytištěn přes konzolu:
Metoda 2: Tisk všech listových uzlů binárního stromu pomocí iterativního přístupu
' iterativní “ přístup je nejúčinnější přístup, používá koncept “ TAM ' a ' pop “ pro výběr „ list “uzly. Klíčové body nebo fungování tohoto přístupu jsou uvedeny níže:
třída Uzel{
konstruktér ( hodnota )
{
tento . data = hodnota ;
tento . vlevo, odjet = nula ;
tento . že jo = nula ;
}
} ;
kde displayLeafNodes = ( rootNode ) =>
{
-li ( ! rootNode )
vrátit se ;
nechat seznam = [ ] ;
seznam. TAM ( rootNode ) ;
zatímco ( seznam. délka > 0 ) {
rootNode = seznam [ seznam. délka - 1 ] ;
seznam. pop ( ) ;
-li ( ! rootNode. vlevo, odjet && ! rootNode. že jo )
dokument. napsat ( rootNode. data + '' ) ;
-li ( rootNode. že jo )
seznam. TAM ( rootNode. že jo ) ;
-li ( rootNode. vlevo, odjet )
seznam. TAM ( rootNode. vlevo, odjet ) ;
}
}
byl rootNode = Nový Uzel ( 3 ) ;
rootNode. vlevo, odjet = Nový Uzel ( 6 ) ;
rootNode. že jo = Nový Uzel ( 9 ) ;
rootNode. vlevo, odjet . vlevo, odjet = Nový Uzel ( 12 ) ;
rootNode. vlevo, odjet . že jo = Nový Uzel ( patnáct ) ;
rootNode. vlevo, odjet . že jo . že jo = Nový Uzel ( 24 ) ;
rootNode. že jo . vlevo, odjet = Nový Uzel ( 18 ) ;
rootNode. že jo . že jo = Nový Uzel ( dvacet jedna ) ;
displayLeafNodes ( rootNode ) ;
Vysvětlení výše uvedeného kódu je napsáno níže:
- Nejprve vytvořte „ Uzel 'třída, která přijímá jeden parametr' hodnota ” která je nastavena jako hodnota nově vytvořeného uzlu a levá a pravá strana jsou nastaveny na hodnotu null. Stejně jako ve výše uvedeném příkladu.
- Dále vytvořte funkci ' displayLeafNodes() “, který přijímá jediný parametr „ rootNode “. Tento „rootNode“ je považován za binární strom a nejprve je zkontrolována jeho prázdnota.
- Pokud uzel není prázdný, zobrazí se prázdný seznam s názvem „ seznam “ je vytvořen a „ rootNode “ se do něj vloží pomocí “ TAM() “ metoda.
- Poté, „ zatímco() ” se používá, který se provádí do délky “ seznam “. Uvnitř smyčky je prvek umístěný ve spodní části stromu nebo „ seznam “ se odstraní pomocí “ pop() “ metoda.
- Nyní existence „ vlevo, odjet ' a ' že jo ” strany „rootNode“ jsou zaškrtnuté, a pokud obě strany neexistují, znamená to, že nemá žádný podřízený uzel. Poté se tento uzel zobrazí na obrazovce a identifikuje se jako listový uzel.
- Pokud je uzel na levé nebo pravé straně, znamená to, že má děti. Pak to ' vlevo, odjet ' a ' že jo 'uzel je zatlačen do ' seznam ” pro další operaci hledání listového uzlu.
- Nakonec vytvořte vlastní binární strom předáním hodnot uzlů jako parametrů pro „ Uzel ” konstruktor třídy. Po vytvoření předejte strom „rootNode“ jako argument pro „ displayLeafNodes() funkce “.
Výstup generovaný po kompilaci ukazuje, že jsou vytištěny listové uzly poskytnutého stromu:
Bonusový tip: Tisk listových uzlů binárního stromu zprava doleva
Chcete-li načíst všechny listové uzly, které nemají žádné podřízené uzly v „ že jo “ až “ vlevo, odjet “ směru, rekurzivní přístup je nejvíce doporučován kvůli jeho jednoduchosti. Například stejný strom diskutovaný ve výše uvedených částech bude použit k načtení listového uzlu, ale v „ že jo “ na “ vlevo, odjet “směr, jak je znázorněno níže:
třída Uzel{
konstruktér ( hodnota )
{
tento . data = hodnota ;
tento . vlevo, odjet = nula ;
tento . že jo = nula ;
}
} ;
funkce displayLeafNodes ( vykořenit )
{
-li ( vykořenit == nula )
{
vrátit se ;
}
-li ( vykořenit. vlevo, odjet == nula && vykořenit. že jo == nula )
{
dokument. napsat ( vykořenit. data + '' ) ;
vrátit se ;
}
-li ( vykořenit. že jo != nula )
{
displayLeafNodes ( vykořenit. že jo ) ;
}
-li ( vykořenit. vlevo, odjet != nula )
{
displayLeafNodes ( vykořenit. vlevo, odjet ) ;
}
}
byl rootNode = Nový Uzel ( 3 ) ;
rootNode. vlevo, odjet = Nový Uzel ( 6 ) ;
rootNode. že jo = Nový Uzel ( 9 ) ;
rootNode. vlevo, odjet . vlevo, odjet = Nový Uzel ( 12 ) ;
rootNode. vlevo, odjet . že jo = Nový Uzel ( patnáct ) ;
rootNode. vlevo, odjet . že jo . že jo = Nový Uzel ( 24 ) ;
rootNode. že jo . vlevo, odjet = Nový Uzel ( 18 ) ;
rootNode. že jo . že jo = Nový Uzel ( dvacet jedna ) ;
displayLeafNodes ( rootNode ) ;
Výše uvedený kód funguje takto:
- Nejprve třída ' Uzel ” je vytvořen, který používá výchozí konstruktor k přidání nového uzlu do stromu pouze odkazu provedeného ve výše uvedených příkladech.
- Dále, „ displayLeadNodes() “ je vytvořena funkce, která přijímá jeden parametr „ rootNode “. Tento parametr je kontrolován na „ nula “podmínkou přes “ -li ' prohlášení.
- Pokud zadaný uzel není pravdivý, pak jeho „ vlevo, odjet ' a ' že jo 'postranní uzly jsou kontrolovány na' nula “podmínka. Pokud jsou oba null, pak bude uzel identifikován jako „ list “ a vytisknout přes webovou stránku.
- Poté předejte „ že jo ' a ' vlevo, odjet 'uzly' rootNode “ na “ displayLeafNodes() funkce “.
- Přidělte pozici každého uzlu vytvořením instancí pomocí „ Nový klíčové slovo a Uzel() ” konstruktor a určení pozice jako parametr konstruktoru.
- ' vlevo, odjet “ znamená levou pozici kořenového uzlu a „ vlevo.vlevo ” pozice znamená vlevo nebo vlevo. Stejný přístup je aplikován v případě „ že jo ' a ' že jo “.
- Nakonec předejte „ rootNode “ jako argument pro „ displayLeafNode() funkce “.
Vygenerovaný výstup ukazuje, že listové uzly jsou vytištěny ve směru zprava doleva.
To je vše o tisku všech listových uzlů binárního stromu v libovolném požadovaném směru.
Závěr
Chcete-li vytisknout všechny listové uzly binárního stromu, vytvořte náhodnou třídu, která vytvoří a přiřadí hodnoty uzlům stromu. Dále vytvořte náhodnou funkci, která přijímá jeden uzel stromu v hierarchii shora dolů. Tato funkce obsahuje několik „ -li “ podmínky, které kontrolují, zda „ uzel “ není prázdné a nemá žádné uzly v “ vlevo, odjet ' a ' že jo “, pak je tento uzel považován za “ list ” a zobrazí se na konzole. Tato příručka vysvětluje postup tisku všech listových uzlů binárního stromu zleva doprava nebo zprava doleva.