Képzeld el, hogy egy bináris fát kell átküldened egy műholdra, amely az Alpha Centauri felé közeledik, és korlátozott a sávszélességed. Mivel a fában nincsenek ismétlődő elemek, egyértelműen reprezentálható a preorder és inorder bejárásaival.
Írd meg a szoftvert a műholdnak, hogy a bejárásokból újraépítse a fát.
A preorder bejárás előbb beolvassa az aktuális csúcs értékét, mielőtt a bal részfát preorder módon bejárná (innen a „pre” elnevezés). Ezután a jobb részfa preorder bejárása következik.
Az inorder bejárás először a bal részfát járja be inorder módon, majd az aktuális csúcsot olvassa be, végül pedig a jobb részfát is inorder módon. Tehát balról jobbra haladva.
Például ennek a fának a preorder bejárása: [a, i, x, f, r]. Az inorder bejárása pedig: [i, a, f, x, r]
a
/ \
i x
/ \
f r
Megjegyzés: a preorder bejárás első eleme mindig a gyökér.
Néha kivételt kell dobni. Amikor ezt teszed, mindig szerepeltetned kell egy értelmes hibaüzenetet, amely jelzi, mi a hiba forrása. Ez olvashatóbbá teszi a kódodat, és jelentősen segít a hibakeresésben. Azokban az esetekben, amikor tudod, hogy a hiba forrása egy bizonyos típus, választhatod, hogy a beépített hibatípusok egyikét dobod, de továbbra is szerepeltetned kell egy értelmes üzenetet.
Ez a konkrét feladat megköveteli, hogy a raise utasítást használd, hogy „dobd” a ValueError-t, ha a preorder és inorder argumentumok hosszúságban, elemekben eltérnek, vagy az elemek nem egyediek. A tesztek csak akkor mennek át, ha raise-eled a exception-t, és üzenetet is fűzöl hozzá.
Ahhoz, hogy egy ValueError-t üzenettel dobj, írd az üzenetet az exception típus argumentumaként:
# if preorder and inorder are not the same length
raise ValueError("traversals must have the same length")
# if preorder and inorder do not share the same elements
raise ValueError("traversals must have the same elements")
# if element repeat (are not unique)
raise ValueError("traversals must contain unique items")
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.