Kaip „JavaScript“ atspausdinti visus dvejetainio medžio lapų mazgus iš kairės į dešinę?

Kaip Javascript Atspausdinti Visus Dvejetainio Medzio Lapu Mazgus Is Kaires I Desine



Dvejetainis medis susideda iš kelių mazgų, sujungtų per viršūnes. Kiekvienas mazgas gali būti sujungtas daugiausia su dviem antriniais mazgais, kurie yra žinomi kaip antriniai mazgai. Jei „ mazgas “ neturi pirminio mazgo, bet yra kai kurių antrinių mazgų, turinčių anūkinius mazgus, tada jis vadinamas „ šaknis “ mazgas. Mazgas yra ' vidinis “ mazgas, jei jis turi pirminį ir antrinį mazgą. „ lapelis “ mazgas turi pirminį mazgą, bet joks antrinis mazgas reiškia mazgus, kurie yra aklavietė.

Aptariamų sąvokų vizualinis vaizdas parodytas toliau pateiktame paveikslėlyje:







Šiame vadove paaiškinamas visų dvejetainio medžio lapų mazgų spausdinimo procesas, apimantis toliau nurodytus skyrius:



Kaip atpažinti lapų mazgus?

lapelis “ mazgai yra tie, kurie neturi antrinių mazgų arba, tiksliau, turi „ aukščio ' apie ' 0 “. Jei mazgas turi „ aukščio ' geresnis negu ' 0 “, tada tas mazgas gali būti vidinis mazgas arba šakninis mazgas. „ lapelis “ mazgai paprastai atšaukiami, kad būtų nustatytas pradinis šaltinis, iš kurio sugeneruotas šis mazgas. Jis dažniausiai naudojamas ieškant arba klaidų paieškos algoritmuose, siekiant nustatyti klaidos ar problemos priežastį.



Kaip „JavaScript“ atspausdinti visus dvejetainio medžio lapų mazgus iš kairės į dešinę?

Yra du požiūriai“ rekursyvus “ ir „ pasikartojantis “ norėdami pasirinkti visus galimus lapų mazgus pateiktame dvejetainiame medyje norimame „ paliko 'į' teisingai ' kryptis. Praktinis šių metodų įgyvendinimas parodytas toliau pateiktuose skyriuose:





1 būdas: rekursyviai spausdinkite visus dvejetainio medžio lapų mazgus iš kairės į dešinę

Rekursinis metodas parenka visus a mazgus giluminės paieškos algoritmas būdu, kuris pirmiausia kerta visus kairiuosius mazgus, tada vidurinį mazgą ir dešiniuosius mazgus. Ši operacija atliekama rekursyviai kiekvienam mazgui, o kai nebereikia važiuoti lapelis “ mazgai nustatomi. Norėdami geriau suprasti šią sąvoką, apsilankykite toliau pateiktame kodo fragmente:

klasė Mazgas
{
konstruktorius ( )
{
tai . turinys = 0 ;
tai . paliko = nulinis ;
tai . teisingai = nulinis ;
}
} ;

kur rodomi lapų mazgai = ( rootNode ) =>
{
jeigu ( rootNode == nulinis )
grąžinti ;

jeigu ( rootNode. paliko == nulinis && rootNode. teisingai == nulinis )
{
dokumentas. rašyti ( rootNode. turinys + ' ' ) ;
grąžinti ;
}

jeigu ( rootNode. paliko != nulinis )
displayLeafNodes ( rootNode. paliko ) ;
jeigu ( rootNode. teisingai != nulinis )
displayLeafNodes ( rootNode. teisingai ) ;
}
buvo sampleNode = ( val ) =>
{
buvo tempNode = naujas Mazgas ( ) ;
tempNode. turinys = val ;
tempNode. paliko = nulinis ;
tempNode. teisingai = nulinis ;
grąžinti tempNode ;
}
buvo rootNode = provNode ( 3 ) ;
rootNode. paliko = provNode ( 6 ) ;
rootNode. teisingai = provNode ( 9 ) ;
rootNode. paliko . paliko = provNode ( 12 ) ;
rootNode. paliko . teisingai = provNode ( penkiolika ) ;
rootNode. paliko . teisingai . teisingai = provNode ( 24 ) ;
rootNode. teisingai . paliko = provNode ( 18 ) ;
rootNode. teisingai . teisingai = provNode ( dvidešimt vienas ) ;

displayLeafNodes ( rootNode ) ;

Aukščiau pateikto kodo bloko paaiškinimas pateikiamas toliau:



  • Pirmiausia sukurkite klasę pavadinimu „ mazgas “, kuris sukuria naują mazgą ir nustato jo vertę į „ 0 “. Prisikabinęs ' paliko “ ir „ teisingai “ šoniniai mazgai nustatyti į “ nulinis “ pagal numatytuosius nustatymus naudojant klasės konstruktorių.
  • Tada apibrėžkite „ rodyti lapų mazgai() ' funkcija, kuri priima vieną '' parametrą rootNode “. Ši parametro reikšmė laikoma šiuo metu pasirinktu dvejetainio medžio mazgu.
  • Funkcijos viduje yra „ jeigu “ teiginys naudojamas norint patikrinti, ar „ rootNode “ yra niekinis ar ne. Jeigu ' nulinis “ tolesnis vykdymas tam mazgui sustojo. Kitu atveju šakninis mazgas ' paliko “ ir „ teisingai “ šoniniai mazgai patikrinti “ nulinis “. Jei abu yra nuliniai, to ' mazgas “ bus išspausdintas.
  • Jei „ paliko “ arba „ teisingai “ mazgas nėra „nulis“, tada perkelkite tą mazgo pusę į „ rodyti lapų mazgai() “ funkcija, skirta rekursinei operacijai.
  • Apibrėžkite naują funkciją pavadinimu ' provNode() “, kuris priima vieną parametrą „ val “. Funkcijos viduje sukurkite naują „ Mazgas “klasė pavadinimu “ tempNode “. Priskirkite parametrinį ' val “ kaip klasės nuosavybės vertė “ turinys “ ir nustatykite „ paliko “ ir „ teisingai “ šoniniai mazgai į “ nulinis “ pagal numatytuosius nustatymus.
  • Galiausiai sukurkite objektą pavadinimu ' rootNode ' už ' provNode() “ funkciją ir perduoti mazgo reikšmę kaip šį funkcijos parametrą. Sukurkite kairįjį ir dešinįjį mazgus pridėdami „ paliko “ ir „ teisingai ' raktinius žodžius su 'rootNode' ir priskirkite jiems vertę naudodami tą pačią funkciją ' provNode() “.
  • paliko “ reiškia kairę šakninio mazgo padėtį ir „ kairėje.kairėje “ padėtis reiškia, kad iš kairės iš kairės, tas pats metodas taikomas „“ atveju teisingai “ ir „ teisingai
  • Apibrėžę medį, pateikite „rootNode“ kaip argumentą „ displayLeadNodes() “ funkcija, kad pasirinktumėte ir atspausdintumėte visus sukurto medžio lapų mazgus.

Po kompiliavimo sugeneruota išvestis patvirtina, kad pateikto medžio lapo mazgas buvo nuskaitytas ir išspausdintas per konsolę:

2 būdas: spausdinkite visus dvejetainio medžio lapų mazgus, naudodami kartotinį metodą

pasikartojantis “ metodas yra efektyviausias metodas, jame naudojama sąvoka „ stumti “ ir „ pop “ norėdami pasirinkti „ lapelis “ mazgai. Pagrindiniai šio požiūrio punktai arba veikimas yra nurodyti toliau:

klasė Mazgas
{
konstruktorius ( vertė )
{
tai . duomenis = vertė ;
tai . paliko = nulinis ;
tai . teisingai = nulinis ;
}
} ;

kur rodomi lapų mazgai = ( rootNode ) =>
{
jeigu ( ! rootNode )
grąžinti ;
tegul sąrašas = [ ] ;
sąrašą. stumti ( rootNode ) ;

kol ( sąrašą. ilgio > 0 ) {
rootNode = sąrašą [ sąrašą. ilgio - 1 ] ;
sąrašą. pop ( ) ;
jeigu ( ! rootNode. paliko && ! rootNode. teisingai )
dokumentas. rašyti ( rootNode. duomenis + ' ' ) ;
jeigu ( rootNode. teisingai )
sąrašą. stumti ( rootNode. teisingai ) ;
jeigu ( rootNode. paliko )
sąrašą. stumti ( rootNode. paliko ) ;
}
}

buvo rootNode = naujas Mazgas ( 3 ) ;
rootNode. paliko = naujas Mazgas ( 6 ) ;
rootNode. teisingai = naujas Mazgas ( 9 ) ;
rootNode. paliko . paliko = naujas Mazgas ( 12 ) ;
rootNode. paliko . teisingai = naujas Mazgas ( penkiolika ) ;
rootNode. paliko . teisingai . teisingai = naujas Mazgas ( 24 ) ;
rootNode. teisingai . paliko = naujas Mazgas ( 18 ) ;
rootNode. teisingai . teisingai = naujas Mazgas ( dvidešimt vienas ) ;

displayLeafNodes ( rootNode ) ;

Aukščiau pateikto kodo paaiškinimas parašytas žemiau:

  • Pirmiausia sukurkite „ Mazgas 'klasė, kuri gauna vieną parametrą' vertė “, kuri nustatyta kaip naujai sukurto mazgo vertė, o kairioji ir dešinė pusės yra nulinės. Kaip ir aukščiau pateiktame pavyzdyje.
  • Tada sukurkite funkciją ' rodyti lapų mazgai() “, kuris priima vieną „“ parametrą rootNode “. Šis „rootNode“ laikomas dvejetainiu medžiu ir pirmiausia patikrinamas jo tuštumas.
  • Jei mazgas nėra tuščias, tada tuščias sąrašas pavadinimu ' sąrašą “ yra sukurtas ir “ rootNode “ parametras įterpiamas į jį naudojant „ stumti () “ metodas.
  • Tada ' kol () “ yra naudojamas, kuris vykdomas iki „ sąrašą “. Kilpos viduje elementas, esantis medžio apačioje arba ' sąrašą “ pašalinamas naudojant „ pop () “ metodas.
  • Dabar, kai egzistuoja „ paliko “ ir „ teisingai “ yra patikrintos „rootNode“ pusės, o jei abiejų pusių nėra, tai reiškia, kad jis neturi antrinio mazgo. Tada šis mazgas rodomas ekrane ir identifikuojamas kaip lapo mazgas.
  • Jei kairėje arba dešinėje pusėje yra mazgas, tai reiškia, kad jis turi vaikų. Tada tas ' paliko “ ir „ teisingai “ mazgas nustumiamas į “ sąrašą “ tolesnei lapo mazgo radimo operacijai.
  • Pabaigoje sukurkite pasirinktinį dvejetainį medį, pateikdami mazgo reikšmes kaip parametrus „ Mazgas “ klasės konstruktorius. Sukūrę perduokite medį „rootNode“ kaip argumentą „ rodyti lapų mazgai() ' funkcija.

Po kompiliavimo sugeneruota išvestis rodo, kad pateikto medžio lapų mazgai yra atspausdinti:

Papildomas patarimas: spausdinkite dvejetainio medžio lapų mazgus iš dešinės į kairę

Norėdami gauti visus lapų mazgus, kuriuose nėra antrinių mazgų teisingai 'į' paliko “ kryptimi, rekursyvinis metodas yra labiausiai rekomenduojamas dėl savo lengvumo. Pavyzdžiui, tas pats medis, aptartas aukščiau esančiuose skyriuose, bus naudojamas lapo mazgui gauti, bet „ teisingai “ į „ paliko “ kryptimi, kaip parodyta žemiau:

klasė Mazgas
{
konstruktorius ( vertė )
{
tai . duomenis = vertė ;
tai . paliko = nulinis ;
tai . teisingai = nulinis ;
}
} ;


funkcija displayLeafNodes ( šaknis )
{
jeigu ( šaknis == nulinis )
{
grąžinti ;
}

jeigu ( šaknis. paliko == nulinis && šaknis. teisingai == nulinis )
{
dokumentas. rašyti ( šaknis. duomenis + ' ' ) ;
grąžinti ;
}
jeigu ( šaknis. teisingai != nulinis )
{
displayLeafNodes ( šaknis. teisingai ) ;
}
jeigu ( šaknis. paliko != nulinis )
{
displayLeafNodes ( šaknis. paliko ) ;
}
}


buvo rootNode = naujas Mazgas ( 3 ) ;
rootNode. paliko = naujas Mazgas ( 6 ) ;
rootNode. teisingai = naujas Mazgas ( 9 ) ;
rootNode. paliko . paliko = naujas Mazgas ( 12 ) ;
rootNode. paliko . teisingai = naujas Mazgas ( penkiolika ) ;
rootNode. paliko . teisingai . teisingai = naujas Mazgas ( 24 ) ;
rootNode. teisingai . paliko = naujas Mazgas ( 18 ) ;
rootNode. teisingai . teisingai = naujas Mazgas ( dvidešimt vienas ) ;

displayLeafNodes ( rootNode ) ;

Aukščiau nurodytas kodas veikia taip:

  • Pirma, klasė ' Mazgas “ yra sukurtas, naudojant numatytąjį konstruktorių, kad į medį pridėtų naują mazgą, tik aukščiau pateiktuose pavyzdžiuose padarytą nuorodą.
  • Toliau „ displayLeadNodes() Sukurta funkcija ', kuri priima vieną '' parametrą rootNode “. Šis parametras patikrintas „ nulinis “ sąlyga per „ jeigu “ pareiškimas.
  • Jei pateiktas mazgas nėra teisingas, tada jo ' paliko “ ir „ teisingai “ šoniniai mazgai patikrinti “ nulinis “ sąlyga. Jei abu yra nuliniai, mazgas bus identifikuojamas kaip „ lapelis “ mazgas ir išspausdintas tinklalapyje.
  • Po to praeikite „ teisingai “ ir „ paliko “ mazgai rootNode “ į „ rodyti lapų mazgai() ' funkcija.
  • Paskirkite kiekvieno mazgo padėtį kurdami egzempliorius naudodami „ naujas “ raktažodis ir „ Mazgas () ” konstruktorių ir kaip konstruktoriaus parametrą nurodydami poziciją.
  • paliko “ reiškia kairę šakninio mazgo padėtį ir „ kairėje.kairėje “ padėtis reiškia kairę arba kairę. Tas pats metodas taikomas tuo atveju, kai „ teisingai “ ir „ teisingai “.
  • Galiausiai pereikite „ rootNode “ kaip argumentą už „ displayLeafNode() ' funkcija.

Sugeneruota išvestis rodo, kad lapų mazgai spausdinami kryptimi iš dešinės į kairę.

Tai viskas apie visų dvejetainio medžio lapų mazgų spausdinimą bet kuria norima kryptimi.

Išvada

Norėdami spausdinti visus dvejetainio medžio lapų mazgus, sukurkite atsitiktinę klasę, kuri sukuria ir priskiria reikšmes medžio mazgams. Tada sukurkite atsitiktinę funkciją, kuri priima vieną medžio mazgą hierarchijoje iš viršaus į apačią. Šioje funkcijoje yra keli „ jeigu “ sąlygos, kurios tikrina, ar „ mazgas “ nėra tuščias ir jame nėra mazgų paliko “ ir „ teisingai “ kryptimi, tada tas mazgas laikomas „ lapelis “ mazgas ir rodomas konsolėje. Šiame vadove paaiškinta, kaip spausdinti visus dvejetainio medžio lapų mazgus iš kairės į dešinę arba iš dešinės į kairę.