By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
432,118 Members | 1,134 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 432,118 IT Pros & Developers. It's quick & easy.

help with reading a text file and storing the values into a tree

P: 34
Hi guys,
I have this coding that I wanted to try out.
Basically this is meant to be done in Java as practice for the Topic trees in data structures and algorithms.
I have recently learned C++ on my own so I wanted to test my skill in C++ by tryin to solve this problem using C++.

so yea here it goes...
i have a text file as follows...
Expand|Select|Wrap|Line Numbers
  1. H,E,L
  2. E,B,F
  3. B,A,C
  4. A,null,null
  5. c,null,D
  6. D,null,null
  7. F,null,G
  8. G,null,null
  9. L,J,M
  10. J,I,K
  11. I,null,null
  12. K,null,null
  13. M,null,null
  14.  
i want to write the code that would read in the text file and store the 1st value gotten as a root, the 2nd value as the left value of the root and 3rd value as the right value of the root..
i have already given a shot at this but i aint that successful with it..

the following are the 2 other files... Tree.h and TreeNode.h
this one is TreeNode.h
Expand|Select|Wrap|Line Numbers
  1. #pragma once
  2. #include <iostream>
  3. #include <fstream>
  4. #include <string>
  5. #include <deque>
  6. #include <queue>
  7. using namespace std;
  8.  
  9. template <class T>
  10. class TreeNode
  11. {
  12.     public:
  13.         TreeNode<T>(T newItem);
  14.         ~TreeNode<T>(void);
  15.         void setItem(T newItem);
  16.         void setLeft(TreeNode newLeft);
  17.         void setRight(TreeNode newRight);
  18.         T getItem();
  19.         T getLeft();
  20.         T getRight();
  21.  
  22.     private:
  23.         T item;
  24.         TreeNode left;
  25.         TreeNode right;
  26. };
  27.  
  28.  
  29. template <class T>
  30. TreeNode<T>::TreeNode(T newItem)
  31. {
  32.     item = newItem;
  33.     left = null;
  34.     right = null;
  35. }
  36.  
  37. template <class T>
  38. TreeNode<T>::~TreeNode(void)
  39. {
  40. }
  41.  
  42.  
  43. template <class T>
  44. void TreeNode<T>::setItem(T newItem) 
  45. {
  46.     // set methods
  47.     item = newItem;
  48. }
  49.  
  50. template <class T>
  51. void TreeNode<T>::setLeft(TreeNode newLeft) 
  52. {
  53.     left = newLeft;
  54. }
  55.  
  56. template <class T>
  57. void TreeNode<T>::setRight(TreeNode newRight) 
  58. {
  59.     right = newRight;
  60. }
  61.  
  62. template <class T>
  63. T TreeNode<T>::getItem() 
  64. {
  65.     // get methods
  66.     return item;
  67. }
  68.  
  69. template <class T>
  70. T TreeNode<T>::getLeft() 
  71. {
  72.     return left;
  73. }
  74.  
  75. template <class T>
  76. T TreeNode<T>::getRight() 
  77. {
  78.     return right;
  79. }
  80.  
this one is Tree.h
Expand|Select|Wrap|Line Numbers
  1. #pragma once
  2. #include <iostream>
  3. #include <fstream>
  4. #include <string>
  5. #include <deque>
  6. #include <queue>
  7. using namespace std;
  8.  
  9. template <class T>
  10. class Tree
  11. {
  12.     public:
  13.         Tree<T>(T rootItem);
  14.         ~Tree<T>(void);
  15.         bool isEmpty();
  16.         T getRoot();
  17.  
  18.     private:
  19.         TreeNode root;
  20. };
  21.  
  22.  
  23. template <class T>
  24. Tree<T>::Tree(T rootItem)
  25. {
  26.     root = new TreeNode(rootItem);
  27. }
  28.  
  29. template <class T>
  30. Tree<T>::~Tree(void)
  31. {
  32. }
  33.  
  34.  
  35. template <class T>
  36. bool Tree<T>::isEmpty() 
  37. {
  38.     // check emtpy
  39.     return root == null;
  40. }
  41.  
  42. template <class T>
  43. T Tree<T>::getRoot() 
  44. {
  45.     // get tree root
  46.     return root;
  47. }
  48.  

the following code is from my main method to try and read the file... but it isnt correct..
Expand|Select|Wrap|Line Numbers
  1. typedef queue<TreeNode> TreeLinkedList;
  2. TreeLinkedList myQueue;
  3.  
  4. template <class T>
  5. T readOneObject(string string1)
  6. {
  7.     char * cstr, *p;
  8.     int counter;
  9.     string str (string1);
  10.     string data1, data2, data3;
  11.  
  12.     cstr = new char [str.size()+1];
  13.     strcpy (cstr, str.c_str());
  14.  
  15.     // cstr now contains a c-string copy of str
  16.  
  17.     int count = 0;
  18.     p=strtok (cstr,",");
  19.     count++;
  20.     while (p!=NULL)
  21.     {
  22.         p=strtok(NULL,",");
  23.         if( count == 1 )
  24.         {
  25.             data1.append(p);
  26.             root = data1;
  27.         }
  28.         else if( count == 2 )
  29.         {
  30.             data2.append(p);
  31.         }
  32.         else if( count == 3 )
  33.         {
  34.             data3.append(p);
  35.         }
  36.         count++;
  37.         if( count == 3 )
  38.             break;
  39.     }
  40.  
  41.     delete[] cstr; 
  42.     return treeObj;
  43. }
  44.  
  45. void readFile(string filename1)
  46. {
  47.     char oneline[256];
  48.     ifstream infile(filename1.c_str());
  49.     Tree * treeObj = NULL;
  50.  
  51.     while(infile.good())
  52.     {
  53.         infile.getline(oneline, 256);
  54.  
  55.         if(strlen(oneline) == 0)
  56.         {
  57.             continue;
  58.         }
  59.         treeObj = readOneObject(oneline);
  60.  
  61.         //if( treeObj != NULL )
  62.             //myQueue.push(treeObj); //linkedListObj.InsertNode(shapeObj);
  63.     }
  64.     infile.close();    
  65. }
  66.  
every help is appreciated.. please help me to solve this...
thanks in advance...:D
i will check for replies every 30 mins or lesser.. so plz come back and check if u had left any comments or qns for me to answer.. thanks :D
Sep 2 '08 #1
Share this Question
Share on Google+
8 Replies


100+
P: 424
I didn't read your code, but can you be more specific about what problems you are having?
Sep 2 '08 #2

Expert 10K+
P: 11,448
You 'left' and 'right' items in your TreeNode class should be pointers (or references)
to a TreeNode; your Java background is shining through ;-) You're also missing
some <T> template tags here and there ...

kind regards,

Jos
Sep 2 '08 #3

P: 34
I didn't read your code, but can you be more specific about what problems you are having?
well basically i want to create a method for reading in my text file and saving it to the respective right, left, root of the tree node

problems faced are that my method is wrong so it aint working.. it/the method for readin in a file isnt correct...
Sep 2 '08 #4

P: 34
You 'left' and 'right' items in your TreeNode class should be pointers (or references)
to a TreeNode; your Java background is shining through ;-) You're also missing
some <T> template tags here and there ...

kind regards,

Jos

haha yea i did do a full course in Java in my 1st yr in uni.. goin to enter 2nd yr this sept.. was hopin to get some practice for a small headstart.. ;)
well gimme a few mins i will edit my code again and post it..
could ya tell me how i shd go abt implementing/writing the code to read in my text file? its definitely wrong but sort of in the right track..
Sep 2 '08 #5

P: 34
You 'left' and 'right' items in your TreeNode class should be pointers (or references)
to a TreeNode; your Java background is shining through ;-) You're also missing
some <T> template tags here and there ...

kind regards,

Jos
by the way
u see anything wrong with the 1st line?
typedef queue<TreeNode> TreeLinkedList;
TreeLinkedList myQueue;

error C3203: 'TreeNode' : unspecialized class template can't be used as a template argument for template parameter '_Ty', expected a real type
Sep 2 '08 #6

Expert 10K+
P: 11,448
by the way
u see anything wrong with the 1st line?
typedef queue<TreeNode> TreeLinkedList;
TreeLinkedList myQueue;

error C3203: 'TreeNode' : unspecialized class template can't be used as a template argument for template parameter '_Ty', expected a real type
Is the type TreeNode known at that location? You do have to #include it before
you want to use it; C++ is definitely not Java.

kind regards,

Jos
Sep 2 '08 #7

Expert 100+
P: 849
You've also declared TreeNode as a template class, thus, your declaration should be
Expand|Select|Wrap|Line Numbers
  1. typedef queue<TreeNode<some type)> > TreeLinkedList;
. The space is necessary, otherwise C++ interprets it as the >> operator and you'll get errors.
Sep 2 '08 #8

weaknessforcats
Expert Mod 5K+
P: 9,197
I assume this is for a course you are taking otherwise you should be using a map.
Sep 2 '08 #9

Post your reply

Sign in to post your reply or Sign up for a free account.