Tudnátok segíteni ebben a feladatban? Python
Implementálnom kell egy függvényt (pontosabban osztályt) aminek bemenete egy bináris fa gyökere és vissza kell adni az összes 3 elemű részfa összegét a fában.
Feltöltöttem pastebinre, van példa és magyarázat hozzá:
https://pastebin-com/u31rxdhG
(a kötőjelet írjátok át pontra, nem enged rendesen linkelni)
Ötleteket várnék igazából mert nem tudom hogy kéne hozzákezdeni.
A fát nem nekem kell felépíteni, az nem része a feladatnak.
Igaz valami teszt fával majd ki kell próbálnom a megoldásomat de ahhoz előbb megoldásig kéne eljutnom.
Fák bejárására keress rá. Jellemzően rekurzívan érdemes csinálni, tehát mondjuk egy függvény mindig a gyökértől indul, és annak a csomópontnak minden gyerekére meghívja önmagát, és paraméterként kapja a gyereket, mint az alatta lévő részfa gyökerét. A visszaadott érték lehet a gyerekek száma +1 (önmaga). Ezeket kell összegezni egy csomópont összes gyerekére és lehet ellenőrizni, hogy az adott csomópont alatt hány gyerek volt. Ez csak a darabszám, az összegzéshez már csak kis kiegészítés kell.
Ez most kicsit zanza lett, de talán érthető a lényeg.
Hát a feladat szerint max 10 lehet a fa mélysége, így nyugodtan lehet rekurzív megoldást alkalmazni.
Írsz két segédfüggvényt, az egyik visszaadja adott részfa méretét, a másik az elemek összegét.
Meghívod a fára az előbbit, aztán a 3 elemű részfákra az utóbbit, az összegeket pedig összeadod.
Ha nem tanultál DP-t, akkor ennyi, ha igen, akkor meg optimalizálhatsz, mert a méretek számítása ugye így exponenciális komplexitáshoz vezet, ezt lehet lineárisra javítani.
Ok itt tartok:
https://pastebin-com/AqGURv9z
Megvan a két metódus, jól visszaadják a fa elemszámát és az elemek összegét.
De nem tudom hogy kéne ezeket jól felhasználni. Pontosabban elméletben asszem értem csak nem tudom implementálni. Hogy válogatom ki a 3 elemszámúakat? Végig megyek minden részfán és ha 3 elemszámú, akkor hozzáadom valami listához pl?
Nem kell lista. A threeSum metódus is rekurzív implementáció legyen, gondold át mik a base case-ek.
Ha null a fád, akkor nyilván 0-át kell visszaadni.
Ha nem null, akkor lekéred a méretét.
Innen 3 eset van:
- a méret pontosan 3 => lekéred az összeget és hozzá adod a válaszhoz
- a méret kisebb, mint 3 => 0 (biztosan nincs 3 elemű részfa)
- a méret nagyobb, mint 3 => rekurzívan megvizsgálod a gyerekeket
Asszem működik, köszi.
A DP megoldást nem tudom hogy kell de jó lesz így is szerintem.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!