Leveys ensimmäinen vs. syvyys ensimmäinen puiden kulkeminen Javascriptissa

Kun etsimme puusta löytääksemme, sisältääkö se tietyn solmun, voidaan rakentaa kaksi algoritmia. Voimme kulkea puun läpi leveys-ensin tai syvyys-ensin -lähestymisellä.

Ensimmäinen syvyysmenetelmä uskoo menemään niin pitkälle puusta kuin mahdollista, kunnes se saavuttaa umpikujan. Kun se saavuttaa nolla-arvon, se alkaa varmuuskopioida ylhäältä ja noudattaa samaa prosessia.

Leveys-ensimmäinen-menetelmä yrittää parhaansa pysyä mahdollisimman lähellä yläosaa kuin mahdollista. Se kulkee puuta yksi rivi kerrallaan ja tarkastelee kaikkia sisarussolmujaan. Se jatkaa tätä, kunnes se saavuttaa viimeisen rivin.

Yksinkertaisen solmu- ja puoluokan rakentaminen

Solmuluokassa on konstruktori, jolla on kaksi ominaisuutta. Sillä on tietoominaisuus solmun arvon tallentamiseksi ja lasten omaisuus lasten solmujen ryhmän pitämiseksi. Lisää () -menetelmää voidaan käyttää lisäämään uusia solmuja puuhun ja poista () -menetelmä poistaa ei-toivotun lapsisolmun.

Puulajia luotaessa tarvitsemme vain ominaisuuden osoittamaan ensimmäiseen solmuun, joka tunnetaan myös nimellä juuri.

Puun luokan sisällä olemme luoneet DFS- ja BFS-hakutoiminnot etsimään solmujen puusta.

Syvyys-ensimmäinen algoritmi

Tarkistaaksemme, että puu sisältää tietyn arvon DFS-lähestymistapaa käyttämällä, luomme toiminnon, joka alkaa julistamalla kokoelmajoukko, joka sisältää juurisolmun. Rakennamme sitten jonkin aikaa silmukan, joka jatkuu, kunnes taulukon sisällä ei ole enää arvoa.

DFS käyttää pinoa solmujen puun selaamiseen. Julistamme nykyisen solmun siirtämällä pois taulukon ensimmäisen arvon. Tämän solmun avulla tarkistetaan onko sen tiedot yhtä suuret kuin etsimämme arvo. Jos se on sama, palaamme True ja poistumme toiminnosta. Jos solmun arvo ei vastaa, työnnämme kyseisen solmun lapset taulukon eteen, jos niitä on olemassa. Siirrämme lapset eteenpäin, koska DFS-lähestymistapa haluaa meidän menevän aina puun pohjalle ennen kuin tarkastamme sisaruksen. Jos mikään arvo ei vastaa koko puusta tehdyn haun jälkeen, palaamme väärän toiminnon lopussa.

Leveys-ensimmäinen algoritmi

DFS-toiminnon rakentamisen jälkeen BFS-toiminto näyttää hyvin samanlaiselta, mutta pienellä erolla. Kun käytämme BFS-lähestymistapaa, haluamme tarkistaa kaikki sisaruselementit ennen siirtymistä puun seuraavalle riville. Suoritamme tämän käyttämällä jonoa. Jono vaatii meitä käyttämään push-menetelmää vaihtamattoman menetelmän sijasta käsitellessään solmun lapsia. Sen sijaan, että ottaisimme solmun lapset ja asettaisimme heidät kokoelmalistan etuosaan, työnnämme sen sijaan heidät loppuun. Tämä varmistaa, että tarkistamme kaikki sisaruselementit ennen siirtymistä puun seuraavalle riville.

Milloin käytetään BFS vs. DFS?

Molemmat algoritmit voivat olla hyödyllisiä, kun siirrytään puun läpi etsimään arvoa, mutta kumpi on parempi? Kaikki riippuu puun rakenteesta ja siitä, mitä etsit. Jos tiedät etsimäsi arvon olevan lähempänä huippua, BFS-lähestymistapa saattaa olla parempi vaihtoehto, mutta jos puu on hyvin leveä eikä liian syvä, DFS-lähestymistapa saattaa olla nopeampi ja tehokkaampi. Muista vain, että on olemassa monia muita tekijöitä, jotka sinun on määritettävä, ennen kuin valitset lähestymistavan. Uskon, että selvität sen!