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 :
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 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(); } };
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 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 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
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; }
VOila.
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; }
Lorsque je fais
Il m'affiche bien mon gencode et apres... Il plante quand j'essaie de fermer...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SetDlgItemText(hDlg, IDC_GENCODE, ListeProduit.Afficher(mongencode).GetGencode());
Quelqu'un aurait il une idée ?
Partager