Arbre binaire, comment copier tout les elements d un arbre dans ....

Arbre binaire, comment copier tout les elements d un arbre dans .... - Algo - Programmation

Marsh Posté le 05-04-2004 à 14:53:29    

:hello: ,
j aimerai copier tout les elements d un arbre binaire dans un vecteur, ceci en "lisant" larbre de gauche a droite : inorder
 
algo pour inorder :

Code :
  1. void btree::printInOrderSlave (tree t){
  2.     if (t != NULL) {
  3.         printInOrderSlave (t->left);
  4.         cout << t->data << endl;
  5.         printInOrderSlave (t->right);
  6.     }
  7. }


 
mais si a la place de cout << t->data je veus copier la valeur dans un vecteur comment garder a la fois la recursivite et recupere le vecteur ?

Code :
  1. void btree::printInOrderSlave (tree t, vector<int> v){
  2. //idem
  3. v.push_back(t->data);


c est pas bon vu que je ne recupere pas le vecteur, ce qu il faudrais en fait c est un return quelque part.
 
 
exemple pour sauvegarder le contenu dans un fichier j ai fais ca :

Code :
  1. void btree::writeInOrderToFileSlave(tree t,const string& out)
  2. {
  3.     ofstream outfile;
  4.     outfile.open(out.c_str(),ios_base::app);
  5.     if (t != NULL) {
  6.         outfile << t->data << endl;
  7.         writeInOrderToFileSlave(t->left, out);
  8.         writeInOrderToFileSlave(t->right, out);
  9.     }
  10.     outfile.close();
  11. }


c est pas super :/ open /close a chaque appel, il dois y avoir mieu.
 
merci pour votre aide.
 

Reply

Marsh Posté le 05-04-2004 à 14:53:29   

Reply

Marsh Posté le 05-04-2004 à 14:56:50    

il faut faire 2 fct...
 

Code :
  1. writeinorder()
  2. {
  3. openfile
  4. _writeinorder()
  5. closefile
  6. }
  7. _writeinorder()
  8. {
  9. if (t != NULL)
  10.    {
  11. outfile << t->data << endl;
  12. writeInOrderToFileSlave(t->left, out);
  13. writeInOrderToFileSlave(t->right, out);
  14.     }
  15. }

Reply

Marsh Posté le 05-04-2004 à 15:01:42    

Pouquoi ta fonction récursive renverrait pas un vector tout simplement?
 
[edit]
Chuis pas sûr d'avoir capté le pb, en fait...[:joce]


Message édité par skeye le 05-04-2004 à 15:02:51
Reply

Marsh Posté le 05-04-2004 à 15:09:06    

JagStang a écrit :

il faut faire 2 fct...
 

Code :
  1. writeinorder()
  2. {
  3. openfile
  4. _writeinorder()
  5. closefile
  6. }
  7. _writeinorder()
  8. {
  9. if (t != NULL)
  10.    {
  11. outfile << t->data << endl;
  12. writeInOrderToFileSlave(t->left, out);
  13. writeInOrderToFileSlave(t->right, out);
  14.     }
  15. }




je dois donc passer a _writeinorder(), un parametre qui est const ofstream& outfile ?

Reply

Marsh Posté le 05-04-2004 à 15:13:17    

oui par exemple.

Reply

Marsh Posté le 05-04-2004 à 15:15:50    

ok, et pour le premier pb tas pas une idee ? :)

Reply

Marsh Posté le 05-04-2004 à 15:21:32    

oui de la même façon, tu déclares un vecteur dans la fonction d'appel (writeinorder), et tu l'alimentes dans la fonction de parcours (_writeinorder)

Reply

Marsh Posté le 05-04-2004 à 15:35:35    

sa marhce merci !

Code :
  1. vector<int> btree::fillGrid()
  2. {
  3.     vector<int> a;
  4.     _fillGrid(root, a);
  5.     return a;
  6. }
  7. void btree::_fillGrid(tree t, vector<int>& a )
  8. {
  9.     if (t != NULL) 
  10.    {
  11.       a.push_back(t->data);
  12.       _fillGrid(t->left, a);
  13.       _fillGrid(t->right, a);
  14.     }
  15. }


 

Reply

Marsh Posté le 05-04-2004 à 15:37:13    

:)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed