j ai un autre problem en rapport avec les objets
l objet btree mytree est cree au tout debut du main.
ensuite si l option est "2" il lance mytree.print()
si c est "1" mytree.insert()
ect..
Maintenant une fois l arbre creer et que je retourne sue l option 1
il me faut repartir a zero et soit, detruire toutes les nodes de mytree soit creer un nouvel objet mytree.
ma fonction des ~btree
Code :
- btree::~btree() { destroyTree(root); }
- void btree::destroyTree(tree t)
- {
- if(t!=NULL )
- {
- destroyTree(t->left);
- destroyTree(t->right);
- cout << "t-> data : " << t->data << " deleted ! " << endl;
- delete t;
- }
- }
|
mais le problem c est que sa plante dans un cas particulier :
si mon fichier in1 est plus petit en nombre d element que in2.
in1 < in2 < in3 ... la nouvel insertion se passe bien.
sinon (in1 > in2) sa plante a linsertion.
et je narrive pas a voir pourquoi.
donc le mieux je pense serait de creer un nouvel objet a chauqe insertion, mais la il y a un pb c est que comment pouraije faire pour les fonction mytree.print() mytree.save() ? car elles on besoin de savoir ce qu est mytree avant l insertion.
exemple :
Code :
- switch (choice)
- {
- case 1 : {
- string in;
- ifstream infile;
- cout << "Please enter name of data file "<<endl;
- cin >> in;
- infile.open(in.c_str());
- if (infile.fail())
- {
- cerr << "Cannot find " << in.c_str() << "\n";
- cin.clear();
- break;
- }
- int element;
- mytree.~btree();
- while(infile >> element)
- {
- mytree.insert(element);
- }
- infile.close();
- break;
- }
-
- case 2 : {
- mytree.printUpRight();
- break;
- }
-
- case 4 : {
- string out;
- cout << "Please enter name of output file "<<endl;
- cin >> out;
- mytree.writePreOrder(out);
- break;
- }
- case 5 : return 0; break; //destroy tree
- }
- }
|
la fonction insert
Code :
- void btree::insert(int data) {insertSlave(data, root);}
- void btree::insertSlave(int data, tree& t) {
- if (t == NULL) {
- t = new node;
- t->left = NULL;
- t->right = NULL;
- t->data = data;
- }
- else {
- if (data < t->data) insertSlave (data, t->left);
- else if (data > t->data) insertSlave (data, t->right);
- else cerr << "element already in place" << endl;
- }
- }
|
une histoire de pointeur ?