Donada la classe que permet gestionar arbres generals usant memòria dinàmica, cal implementar el mètode
bool nari(nat n) const;
que retorna si l’arbre és -ari (tots els nodes excepte les fulles són de grau ), en cas contrari.
Cal enviar a jutge.org la següent especificació de la classe i la implementació del mètode dins del mateix fitxer.
#include <cstdlib>
using namespace std;
typedef unsigned int nat;
template <typename T>
class Arbre {
public:
// Construeix un Arbre format per un únic node que conté a x.
Arbre(const T &x);
// Tres grans.
Arbre(const Arbre<T> &a);
Arbre& operator=(const Arbre<T> &a);
~Arbre() throw();
// Col·loca l'Arbre donat com a primer fill de l'arrel de l'arbre sobre el que s'aplica el mètode i l'arbre a queda invalidat; després de fer b.afegir\_fill(a), a no és un arbre vàlid.
void afegir_fill(Arbre<T> &a);
static const int ArbreInvalid = 400;
// Indica que si l'arbre és n-ari (tots els nodes excepte les fulles són de grau n)
bool nari(nat n) const;
private:
Arbre(): _arrel(NULL) {};
struct node {
T info;
node* primf;
node* seggerm;
};
node* _arrel;
static node* copia_arbre(node* p);
static void destrueix_arbre(node* p) throw();
// Aquí va l'especificació dels mètodes privats addicionals
};
// Aquí va la implementació del mètode nari
Per testejar la solució, jutge.org ja té implementats la resta de mètodes de la classe i un programa principal que llegeix un arbre general i desprès crida vàries vegades el mètode .
L’entrada consisteix en la descripció d’un arbre general d’enters (el seu recorregut en preordre, en el qual al valor de cada node li segueix el seu nombre de fills). A continuació segueix una seqüència d’enters que representen diferents valors per testejar .
Una línia per cada element de la seqüència d’enters d’entrada, amb el text "-ari: NO" indicant que l’arbre no és -ari o amb el valor "-ari: SI" indicant que l’arbre és -ari.
Només cal enviar la classe requerida i la implementació del mètode . Pots ampliar la classe amb mètodes privats. Segueix estrictament la definició de la classe de l’enunciat.
Input
-7 3
8 0
4 3
3 0
0 0
6 0
-5 3
2 0
9 3
1 0
8 0
5 0
7 0
0
1
2
3
Output
0-ari: NO 1-ari: NO 2-ari: NO 3-ari: SI
Input
7 0 0 1 2 3
Output
0-ari: SI 1-ari: SI 2-ari: SI 3-ari: SI
Input
7 1 8 0 0 1 2 3
Output
0-ari: NO 1-ari: SI 2-ari: NO 3-ari: NO