Sto costruendo un albero di ricerca binaria seguendo il deitel
questo è il nodo dell'albero
template <class t> class tree; //predichiarazione necessaria per l'amicizia
template <class t>
class treeNode{
friend class tree <t>;
public:
treeNode(const t& val):leftPtr(0),rightPtr(0),value(val){};
private:
treeNode * leftPtr;
treeNode * rightPtr;
t value;
};
questa è la struttura dell'albero
#include "treeNode.h"
template <class t>
class tree{
public:
tree();
void getRoot(){cout<<rootPtr;}
void insertNode(const t& );
void preOrderTraversal()const;
void inOrderTraversal()const;
void postOrderTraversal()const;
private:
treeNode<t> * rootPtr;
//utility functions
void insertNodeHelper(treeNode <t> **, const t&);
void preOrderHelper(treeNode <t>*)const;
void inOrderHelper( treeNode<t>*)const;
void postOrderHelper(treeNode<t>*)const;
};
template <class t>
tree<t>::tree():rootPtr(0){};
template<class t>
void tree<t>::insertNode(const t& val){
insertNodeHelper(&rootPtr,val);
}
template <class t>
void tree<t>::insertNodeHelper(treeNode <t>**ptr,const t& val){
if(*ptr==0)
*ptr=new treeNode<t>(val);
else{
if(val<(*ptr)->value)
insertNodeHelper((&(*ptr)->leftPtr),val);
else{
if(val>(*ptr)->value)
insertNodeHelper((&(*ptr)->rightPtr),val);
else cout<<"\nDoppione";
}
}
}
ho diversi dubbi: il puntatore alla radice punta a zero se l'albero è vuoto, ma poi dopo il primo inserimento punta sempre alla radice iniziale o assume il valore della radice di ogni sottoalbero?