_Achille
Utente Èlite
- Messaggi
- 3,067
- Reazioni
- 725
- Punteggio
- 131
Salve ragazzi.
Sto implementando una struttura ad albero binario in C++. Ho creato una classe Nodo che permette di gestire manulamente il valore, il nodo sinistro e il nodo destro.
Quindi ora voglio creare una classe
Praticamente tramite una enumerazione globale si hanno
Ad esempio chiamando
Qualcuno sa darmi una mano? :thanks:
Sto implementando una struttura ad albero binario in C++. Ho creato una classe Nodo che permette di gestire manulamente il valore, il nodo sinistro e il nodo destro.
C++:
namespace btree
{
template <class T = int>
class BinaryNode
{
friend std::ostream& operator<<(std::ostream& output, BinaryNode<T>& node);
friend std::ostream& operator<<(std::ostream& output, BinaryNode<T>* node);
public:
constexpr BinaryNode(T v) noexcept
: value(v),
left(nullptr),
right(nullptr),
position(1),
copyof_left(left),
copyof_right(right)
{ }
constexpr BinaryNode() noexcept
: BinaryNode(0)
{ }
~BinaryNode();
T& Value() noexcept;
const T& Value() const noexcept;
BinaryNode<T>* & Left() noexcept;
const BinaryNode<T>* const& Left() const noexcept;
BinaryNode<T>* & Right() noexcept;
const BinaryNode<T>* const& Right() const noexcept;
private:
T value;
BinaryNode<T>* left;
BinaryNode<T>* right;
unsigned position;
BinaryNode<T>* copyof_left;
BinaryNode<T>* copyof_right;
void set_position() noexcept;
}
};
}
BinaryTree che semplifichi la gestione dei nodi con una funzione Insert, la cui firma è questa
C++:
template <class ...Instructions> void Insert(const BinaryNode<T>* node, bool arg, Instructions ...args)
Left e Right che fungono da istruzioni e valgono rispettivamente false e true.Ad esempio chiamando
Insert(new BinaryNode<int>(5), Left, Right); setto in nodo destro del nodo sinistro a partire dalla testa. Il problema è che non so utilizzare il variadic template per risolvere il problema. Sono quasi sicuro che servirà la ricorsione e che molto probabilmente il tipo di ritorno void diverrà BinaryNode<T>* const &...Qualcuno sa darmi una mano? :thanks:
Ultima modifica: