Funzione ricorsiva inserimento albero di ricerca binaria

di il
1 risposte

Funzione ricorsiva inserimento albero di ricerca binaria

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?

1 Risposte

Devi accedere o registrarti per scrivere nel forum
1 risposte