Salut a tous. Voila je suis veux créer un arbre binaire contenant des objets. J'ai déjà fait 75% de boulot puisque a parement mon insertion fonctionne. Mais j'ai pas mal de probleme avec ma fonction de recherche.

En effet, des que je fais une recherche, mon prog plante lorsque j'essaie de quitter la fenetre...

Quelqu'un pourrait il m'aider ?

Voici la déclaration de mon arbre :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
class CListeProduit
{
	private:
		CProduit m_valeur;
		class CListeProduit *m_gauche;
		class CListeProduit *m_droite;
 
	public:
		void Insert (CProduit p_ajout);
		void Liberer ();
		void Rechercher (TCHAR* p_code);
		CProduit Afficher (TCHAR* p_code = TEXT(""));
		CListeProduit()
		{
			m_gauche = NULL;
			m_droite = NULL;
		}
		~CListeProduit()
		{
			//Liberer();
		}
 
};
Mon Ajout :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
void CListeProduit::Insert (CProduit p_ajout)
{
	if (wcscmp(m_valeur.GetGenCode(),TEXT("")) != 0)
	{
		if (wcscmp(m_valeur.GetGenCode(), p_ajout.GetGenCode()) > 0)
		{
			if (m_gauche == NULL)
				this->m_gauche = new CListeProduit;
 
			m_gauche->Insert(p_ajout);
 
		}
		else
		{
			if (m_droite == NULL)
				this->m_droite = new CListeProduit;
 
			m_droite->Insert(p_ajout);
		}
	}
	else
		m_valeur = p_ajout;
}
et enfin ma fonction de recherche

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 
CProduit CListeProduit::Afficher (TCHAR* p_code)
{
	CProduit tmp;
 
	//Si on est pas sur le bon produit
	if (wcscmp(p_code,TEXT("")) != 0)
	{
		//Alors si le code est plus grand
		if (wcscmp(p_code, m_valeur.GetGenCode()) > 0)
		{
			//Et que la branche de droite existe
			if (m_droite == NULL)
				return tmp;
			else
				//On va chercher dans la branche de droite
				tmp = m_droite->Afficher(p_code);
		}
		else if(wcscmp(p_code, m_valeur.GetGenCode()) < 0)
		{
			if (m_gauche == NULL)
				return tmp;
			else
				tmp = m_gauche->Afficher(p_code);
		}
		else
			tmp = m_valeur;
 
	}
	else
		tmp = m_valeur;
 
	return tmp;
}
Et la fonction que j'utilise pour detruire mon arbre :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
void CListeProduit::Liberer()
{
	if (m_gauche != NULL)
		m_gauche->Liberer();
	if (m_droite != NULL)
		m_droite->Liberer();
 
	delete m_gauche, m_droite;
}
VOila.

Lorsque je fais

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
SetDlgItemText(hDlg, IDC_GENCODE, ListeProduit.Afficher(mongencode).GetGencode());
Il m'affiche bien mon gencode et apres... Il plante quand j'essaie de fermer...
Quelqu'un aurait il une idée ?