Helyezd át a fa gyökerét egy kiválasztott csomópontra.
A fa a gráf egy speciális fajtája, amelyben minden csomópont össze van kötve, de nincsenek benne körök. Ez azt jelenti, hogy bármely két csomópont között pontosan egy útvonal vezet az egyiktől a másikig.
Ebben a feladatban arról van szó, hogy újraorientálunk egy fát, hogy más nézőpontból lássuk a dolgokat. A családfákat például általában az ős szemszögéből szokás bemutatni:
+------0------+
| | |
+-1-+ +-2-+ +-3-+
| | | | | |
4 5 6 7 8 9
De egy fában nincs eleve adott irány. Ugyanazt az információt a fa bármelyik másik csomópontjának szemszögéből be lehet mutatni úgy, hogy azt húzzuk fel a gyökér helyére, és magával húzzuk a kapcsolatait is. Így ugyanaz a fa a 6 szemszögéből így nézne ki:
6
|
+-----2-----+
| |
7 +-----0-----+
| |
+-1-+ +-3-+
| | | |
4 5 8 9
Ez lehetővé teszi, hogy egyszerűbben írjuk le a két csomópont közötti útvonalakat. A 6-9 útvonal például (amely az első fában felmegy a gyökérhez, majd le egy másik levélcsomóponthoz) láthatóan a 6-2-0-3-9 útvonalat követi.
Ez a feladat abból áll, hogy veszünk egy bemeneti fát, és újraorientáljuk az egyik csomópont nézőpontjából.
Néha kivételt kell dobnod. Ilyenkor mindig adj meg egy beszédes hibaüzenetet, amely elárulja, mi a hiba forrása. Ettől a kódod olvashatóbb lesz, és a hibakeresés is sokkal könnyebb. Ha tudod, hogy a hiba forrása egy adott típusú, választhatsz, hogy a beépített hibatípusok egyikét dobod, de ilyenkor is adj meg beszédes üzenetet.
Ennél a feladatnál a raise utasítás segítségével több ValueErrors kivételt kell „dobnod”, ha a Tree() osztálynak olyan fát adnak át, amelyet nem lehet átorientálni, vagy ha nem található útvonal egy start node és egy end node között.
A tesztek csak akkor lesznek sikeresek, ha a várt exception típust raise-eled, és a várt üzenetet is megadod hozzá.
Figyelmesen nézd át a teszteket és a várt eredményeiket.
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Python nyelvet 17 fogalom146 feladat segítségével, valódi emberi mentorálással, mindez ingyen.