- 3,067
- 725
- CPU
- Intel i5-6600K @4.6 GHz
- Dissipatore
- Cryorig H5
- Scheda Madre
- ASRock Z170 Extreme 6
- HDD
- WesternDigital 1TB & Crucial MX200 250GB
- RAM
- Corsair Ven 16GB DDR4 2133MHz
- GPU
- Sapphire RX 580 Nitro+
- Monitor
- Dell S2418H
- PSU
- RM550X
- Case
- NZXT S340
- Periferiche
- Anne Pro 2, Razer Abyssus
- OS
- Windows 10 Pro
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: