Lowest Common Ancestor S30000


Statement
 

pdf   zip   main.py

Donat un BST a (no buit, que conté nombres enters com a elements, i tots són diferents) i dos nombres enters p i q tal que:

  • són elements d’a

  • són diferents

volem trobar el Lowest Common Ancestor (LCA, en català seria el “node més baix comú”) de p i q dins l’arbre a.

L’LCA de p i q, respecte d’a, es defineix com el node més baix de l’arbre a que té tant p com q com a descendents. Cal tenir en compte que un node es pot considerar descendent de sí mateix, és a dir, si un dels nodes p o q és un avantpassat de l’altre, aleshores aquest node avantpassat seria el LCA.

Escriviu dues funcions que calculin l’LCA de p i q, respecte d’a. Una d’elles (lca_recur(a,p,q)) ho farà recursivament i l’altre (lca_iter(a,p,q)) iterativament.

Paràmetres i retorn de la funció demanada

Els paràmetres de les dues funcions són: un arbre a que és un BST no buit amb nombres enters, tots diferents, com a elements, dos enters diferents p i q, que són elements del BST a.

El retorn de totes dues funcions és un nombre enter.

Entrada

L’entrada al programa serà: un nombre n i una llista d’n nombres enters diferents amb els que construirem el BST.

Després venen dos nombres enters diferents (tots dos han d’estar en la llista amb la que acabem de construir el BST).

Vegeu els exemples del joc de proves públic.

Sortida

La sortida han de ser dos nombres enters, separats per un espai. Tots dos haurien de ser iguals. Un d’ells és l’LCA de l’entrada calculat recursivament, i l’altre és l’LCA de l’entrada calculat iterativament (vegeu el programa principal a code.py).

Vegeu els exemples del joc de proves públic.

Observacions

Heu de baixar-vos el fitxer code.py (icona de la serp). Aquest fitxer és un programa amb tot el que cal per executar els jocs de prova públics. Només falta, clar, les funcions que us demana l’enunciat. Aquest fitxer l’heu de completar amb el codi que falta, i això, tot, és el que heu d’enviar al Jutge com a solució.

Dins el fitxer code.py teniu la classe BST que hem treballat a les classes de l’assignatura. Ha estat modificada per fer més senzilla la solució del problema (vegeu els comentaris a code.py). No caldrà que la vostra solució faci cap import ni res. Tot el codi que us cal el teniu dins de code.py.

L’eficiència i la qualitat de la solució es tindran en compte a la correcció manual.

Public test cases
  • Input

    18
    679 775 999 938 619 908 623 752 624 980 348 567 569 634 667 828 638 604
    567 634
    

    Output

    619 619
    
  • Input

    14
    993 545 36 777 362 269 367 431 926 150 759 440 733 126
    759 367
    

    Output

    545 545
    
  • Input

    15
    450 483 899 805 38 871 936 457 616 780 881 532 118 248 221
    805 780
    

    Output

    805 805
    
  • Input

    6
    609 8 427 54 407 346
    407 427
    

    Output

    427 427
    
  • Input

    15
    450 255 642 323 351 456 523 939 590 495 688 949 725 382 959
    255 939
    

    Output

    450 450
    
  • Information
    Author
    Jordi Delgado
    Language
    Catalan
    Official solutions
    Python
    User solutions
    Python