I am having problems with the following program. We are to create a biary tree that takes words form a text file and then create a link list the the number the word was found on. I have the tree created but I am unsure how to incorporate the link list in to the program. I need the node of the word to point to the line number. If any one can help it would be greatly appreciated. Thanks!
#ifndef TREE_H
#define TREE_H
#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
#include <list>
using namespace std;
struct TreeNode
{
string data;
int lineNumber;
TreeNode *left;
TreeNode *right;
TreeNode *head;
TreeNode *next;
};
TreeNode *ptr = NULL;
class Tree
{
public:
Tree();
int line;
void insert (string word);
TreeNode *search (string word, int line);
void destroyTree();
void inorder();
void linkList (TreeNode *leaf, string word, int line);
void visit (TreeNode* leaf);
private:
void destroyTree(TreeNode *leaf);
void insert (string word, TreeNode *leaf);
TreeNode *search(string word, TreeNode *leaf, int line);
// void linkList(TreeNode *leaf, string word, int line);
void inorder(TreeNode *leaf);
//void visit (TreeNode *leaf);
TreeNode *root;
};
int _tmain(int argc, _TCHAR* argv[])
{
Tree tree;
char text[100];
char *s;
tree.line = 1;
ifstream myfile;
myfile.open("test.txt");
if (myfile.is_open())
{
while (!myfile.eof())
{
myfile>>text;
if(text[0] == '.')
{
tree.line++;
}
s= strtok (text, " ,.-");
while(s != NULL)
{
*s = toupper(*s);
tree.search(s,tree.line);
s = strtok (NULL, " ,.-");
}
}
}
else
{
cout<<"File did not open"<<endl;
}
tree.inorder();
system ("pause");
return 0;
}
Tree::Tree()
{
root = NULL;
}
void Tree::destroyTree(TreeNode *leaf)
{
if (leaf != NULL)
{
destroyTree(leaf->left);
destroyTree(leaf->right);
delete leaf;
}
}
void Tree::insert(std::string word, TreeNode *leaf)
{
if (word < leaf->data)
{
if (leaf->left)
{
insert(word, leaf->left);
}
else
{
leaf->left = new TreeNode;
leaf ->left->data = word;
leaf->left->left = NULL;
leaf->left->right = NULL;
}
}
else
{
if(leaf->right != NULL)
{
insert (word, leaf->right);
}
else
{
leaf->right = new TreeNode;
leaf->right->data = word;
leaf->right->right = NULL;
leaf->right->left = NULL;
}
}
}
TreeNode *Tree::search(string word, TreeNode *leaf, int line)
{
if (leaf != NULL)
{
if (word==leaf->data)
{
linkList(leaf,word,line);
return leaf;
}
if (word<leaf->data)
{
return search(word, leaf->left,line);
}
else
{
return search(word, leaf->right,line);
}
}
else
{
insert(word);
linkList(leaf,word,line);
}
return NULL;
}
void Tree::insert(string word)
{
if (root != NULL)
{
insert (word, root);
}
else
{
root = new TreeNode;
root->data = word;
root->left= NULL;
root->right= NULL;
}
}
TreeNode *Tree::search(std::string word, int line)
{
return search (word, root,line);
}
void Tree::destroyTree()
{
destroyTree(root);
}
void Tree::inorder()
{
inorder(root);
}
void Tree::inorder(TreeNode *leaf)
{
if (leaf != NULL) {
inorder(leaf->left);
visit(leaf);
inorder(leaf->right);
}
}
void Tree::visit (TreeNode *leaf)
{
cout<<leaf->data<<endl;
cout<<leaf->lineNumber<<endl;
}
void Tree::linkList(TreeNode *leaf,string word, int line)
{
TreeNode *temp;
leaf = new TreeNode;
leaf->next = NULL;
if (leaf->lineNumber == NULL)
{
leaf->lineNumber = line;
}
else
{
leaf->lineNumber = line;
leaf->next = NULL;
}
}