Donat un arbre binari a, volem obtenir
el seu diàmetre.
El diàmetre d’un arbre binari es defineix com el nombre d’arestes del camí més llarg entre dos nodes qualsevol. El diàmetre de l’arbre buit és 0. És irrellevant el contingut (el valor) dels nodes, aquesta propietat és una propietat exclusivament de l’estructura de l’arbre.
Per exemple:
Escriviu un programa que llegeixi una seqüència d’arbres binaris
(donats per un recorregut en preordre amb
-
per a arbres buits) i escrigui el seu diàmetre. Per fer-ho,
descarregueu-vos el fitxer code.hs que conté l’esquelet del
programa.
El arbres binaris de naturals venen donats per aquest tipus:
data Arbin = Buit | Node Int Arbin Arbin deriving Show
La funció diametre té tipus
Arbin -> (Int, Int). Fixeu-vos que cal retornar el
diàmetre de l’arbre i la seva alçada (nombre de nodes entre l’arrel i
alguna de les fulles més profundes, ambdós inclosos). Amb aquesta
informació de cada fill n’hi ha prou per poder calcular el
diàmetre i l’alçada de l’arbre. Així la implementació resulta molt més
senzilla i eficient.
Un exemple:
diametre (Node 1 (Node 2 Buit Buit) (Node 3 Buit Buit))
ha de retornar (2,2)
Un altre exemple:
diametre (Node 1 Buit (Node 2 (Node 3 (Node 5 Buit Buit) Buit) (Node 4 Buit (Node 6 Buit Buit))))
ha de retornar (4,4)
La funció convertirEnArbin és de tipus
[Int] -> Arbin. Per exemple,
convertirEnArbin [2, 3, -1, -1, -1]
ha de retornar
Node 2 (Node 3 Buit Buit) Buit
Un altre exemple:
convertirEnArbin [11, 2, 3, -1, -1, 10, -1, -1, 3, 5, -1, -1, 4, -1, -1]
ha de retornar
Node 11 (Node 2 (Node 3 Buit Buit) (Node 10 Buit Buit)) (Node 3 (Node 5 Buit Buit) (Node 4 Buit Buit))
L’entrada és una seqüència d’arbres binaris, donats pel seu recorregut en preordre i amb la marca per indicar els arbres buits. Hi ha un arbre per línia.
Per cada arbre de l’entrada, el programa ha d’escriure el seu diàmetre.
La correcció valorarà l’eficiència, l’elegància, la senzillesa i la qualitat general de la solució lliurada.
Autoria: Jordi Delgado
Generació: 2026-03-22T17:51:22.817Z
© Jutge.org, 2006–2026.
https://jutge.org