944,164 Members | Top Members by Rank

Ad:
  • C++ Discussion Thread
  • Unsolved
  • Views: 3795
  • C++ RSS
Jun 12th, 2007
0

Binary Tree with Link List

Expand Post »
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>
usingnamespace 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;
}
}
Reputation Points: 10
Solved Threads: 0
Newbie Poster
TheWeakGetEaten is offline Offline
9 posts
since Apr 2007
Jun 12th, 2007
1

Re: Binary Tree with Link List

First off, what's with the green color? And use [code] tags for code, please.

Quote ...
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.
You mean the 'line number' the word was found on?

Quote ...
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!
Point to 'the' line number? Or just contain the number?

Why do you have #include <list> if you don't actually use it?
Last edited by Rashakil Fol; Jun 12th, 2007 at 11:04 pm.
Team Colleague
Reputation Points: 1135
Solved Threads: 173
Super Senior Demiposter
Rashakil Fol is offline Offline
2,480 posts
since Jun 2005
Jun 13th, 2007
0

Re: Binary Tree with Link List

point to the line number. I know that i don't need #include <list>, just have been trying different things and forgot to delete it.
Reputation Points: 10
Solved Threads: 0
Newbie Poster
TheWeakGetEaten is offline Offline
9 posts
since Apr 2007
Jun 13th, 2007
0

Re: Binary Tree with Link List

Hmm, I guess you're using the '.' to differentiate between lines?
Featured Poster
Reputation Points: 1536
Solved Threads: 431
Posting Expert
iamthwee is offline Offline
5,865 posts
since Aug 2005

This thread is more than three months old

No one has posted to this discussion for at least three months. Please let old threads die and do not reply to them unless you feel you have something new and valuable to contribute that absolutely must be added to make the discussion complete. Otherwise, please start a new thread in this forum instead.
Message:
Previous Thread in C++ Forum Timeline: why link error
Next Thread in C++ Forum Timeline: Handle right clicks





About Us | Contact Us | Advertise | Acceptable Use Policy
Forum Index | Build Custom RSS Feed


Follow us on Twitter


© 2011 DaniWeb® LLC