Penúltima clau d’un diccionari BST

Donada la classe diccdicc que permet gestionar diccionaris on només hi guardem claus úniques usant arbres binaris de cerca (BST), cal implementar el mètode

  Clau penultima() const;
  // Pre: El diccionari té com a mínim dues claus.
  // Post: Retorna la penúltima clau.

Les claus són del tipus ClauClau que admet una relació d’ordre total, és a dir, tenim una operació de comparació << entre claus.

Cal enviar a jutge.org la següent especificació de la classe diccdicc i la implementació del mètode dins del mateix fitxer. La resta de mètodes públics i privats ja estan implementats.

#include <iostream>
using namespace std;
typedef unsigned int nat;

template <typename Clau>
class dicc {

  public:
    // Constructora per defecte. Crea un diccionari buit.
    dicc();

    // Destructora
    ~dicc();

    // Insereix la clau k en el diccionari. Si ja hi era, no fa res.
    void insereix(const Clau &k);

    // Retorna quants elements (claus) té el diccionari.
    nat quants() const;

    // Retorna la penúltima clau.
    // Pre: El diccionari té com a mínim 2 claus.
    Clau penultima() const;

  private:
    struct node {
      Clau _k;      // Clau
      node* _esq;   // fill esquerre
      node* _dret;  // fill dret
      nat _n;       // Nombre de nodes del subarbre
      node(const Clau &k, node* esq = NULL, node* dret = NULL);
    };
    node *_arrel;

    static void esborra_nodes(node* m);
    static node* insereix_bst(node *n, const Clau &k, bool &ins);

    // Aquí va l'especificació dels mètodes privats addicionals
};

// Aquí va la implementació dels mètodes públics i privats

Degut a que jutge.org només permet l’enviament d’un fitxer amb la solució del problema, en el mateix fitxer hi ha d’haver l’especificació de la classe i la implementació del mètode penultimapenultima (el que normalment estarien separats en els fitxers .hpp.hpp i .cpp.cpp).

Per testejar la classe disposes d’un programa principal que processa blocs que contenen un diccionari amb claus enteres seguit de comandes per calcular la penúltima clau.

Entrada

L’entrada conté varis blocs separats per línies amb 10 guions (———–). Cada bloc consisteix en una línia que conté una seqüències d’enters, són els elements que tindrà originalment el diccionari. A continuació segueixen vàries comandes, una per línea, amb el següent format:

Sortida

Per a cada línia d’entrada, escriu una línia amb el resultat:

Observació

Només cal enviar la classe requerida i la implementació del mètode penultimapenultima. Pots ampliar la classe amb mètodes privats. Segueix estrictament la definició de la classe de l’enunciat.

El mètode penultimapenultima almenys ha de tenir cost logarítmic (en el cas mig) per superar els jocs de prova privats.

Informació del problema

Autoria: Jordi Esteve

Generació: 2026-01-25T15:22:06.326Z

© Jutge.org, 2006–2026.
https://jutge.org