"Generador d'arbres AVL" P86567


Statement
 

pdf   zip   main.py

Recordeu que un arbre AVL és un arbre binari de cerca on, per a cada node, la diferència en valor absolut de les alçades dels seus fills és, com a molt, 1.

Escriviu una funció @all_avl_trees_of_height(h: int) -> Iterator[Tree]@ que, donat un natural hh, generi tots els arbres binaris d’alçada hh que tinguin forma d’AVL. No importa en quin ordre es generin, però s’han de generar tots i sense repetits.

Descarregeu-vos el fitxer code.py que ja conté la definició dels tipus i un programa principal per llegir una seqüència d’alçades i escriure, en ordre lèxicogràfic, tots els arbres AVL d’aquella alçada. Els arbres buits s’escriuen amb un guió, i els arbres que arrelen dos subarbres a1a_1 i a2a_2 s’escriuen amb a1a_1 i a2a_2 entre parèntesis. Per inspirar-vos, el fitxer code.py també conté una funció @all_trees_of_size@ d’exemple que genera tots els arbres binaris (no necessàriament AVLs) amb nn nodes.

Per raons de temps i espai, el Jutge només provarà el vostre programa per h[0..5]h\in[0..5], però el vostre programa hauria de ser correcte per a qualsevol alçada. Per referència, hi ha 108675 arbres AVL d’alçada 5. Es demana que el generador sigui eficient, tenint en compte que el nombre d’arbres binaris és molt superior al nombre d’AVLs quan l’alçada és gran.

Només podeu modificar el codi de la funció requerida, sense canviar-ne la seva capçalera. Heu de respectar els tipus de dades donats. Podeu esborrar la funció @all_trees_of_size@.

Public test cases
  • Input

    0
    1
    2
    3
    

    Output

    0
    -
    1
    (--)
    2
    ((--)(--))
    ((--)-)
    (-(--))
    3
    (((--)(--))((--)(--)))
    (((--)(--))((--)-))
    (((--)(--))(-(--)))
    (((--)(--))(--))
    (((--)-)((--)(--)))
    (((--)-)((--)-))
    (((--)-)(-(--)))
    (((--)-)(--))
    ((-(--))((--)(--)))
    ((-(--))((--)-))
    ((-(--))(-(--)))
    ((-(--))(--))
    ((--)((--)(--)))
    ((--)((--)-))
    ((--)(-(--)))
    
  • Information
    Author
    Jordi Petit
    Language
    Catalan
    Official solutions
    Python
    User solutions
    Python