I am writing code for a binary search tree search and when I compile it i am getting strange errors such as, " /tmp/ccJ4X8Xu.o: In function `btree::btree()':
project1.cpp:(.text+0x0): multiple definition of `btree::btree()' "
What does that mean exactly?
tree.h
#ifndef TREE_H
#define TREE_H
struct node
{
int key_value;
node *left;
node *right;
};
class btree
{
public:
btree();
void p_insert(int key);
node *p_search(int key);
private:
void insert(int key, node *leaf);
node *search(int key, node *leaf);
node *root;
};
#endif
Tree.cpp
#include "tree.h"
#include <iostream>
btree::btree()
{
root = NULL;
}
void btree::p_insert(int key)
{
if(root!=NULL)
insert(key, root);
else
{
root = new node;
root->key_value = key;
root->left = NULL;
root->right = NULL;
}
}
node *btree::p_search(int key)
{
return search(key, root);
}
void btree::insert(int key, node *leaf)
{
if(key < leaf->key_value)
{
if(leaf->left != NULL)
insert(key, leaf->left);
else
{
leaf->left = new node;
leaf->left->key_value = key;
leaf->left->left = NULL;
leaf->left->right = NULL;
}
}
else if(key >= leaf->key_value)
{
if(leaf->right != NULL)
insert(key, leaf->right);
else
{
leaf->right = new node;
leaf->right->key_value = key;
leaf->right->left = NULL;
leaf->right->right = NULL;
}
}
}
node *btree::search(int key, node *leaf)
{
if(leaf!=NULL)
{
if(key==leaf->key_value)
return leaf;
if(key<leaf->key_value)
return search(key, leaf->left);
else
return search(key, leaf->right);
}
else return NULL;
}
main.cpp
#include <iostream>
#include "tree.cpp"
using namespace std;
int main(int argv, char** argc)
{
bool is_there;
btree tree;
int num_array[12] = {22,9,35,3,14,28,46,8,12,21,23,40};
for(int i=0; i < 12; i++)
tree.p_insert(num_array);
for (int j=0; j < 12; j++)
{
is_there = tree.p_search(23);
if(is_there == 1)
cout << "You found 23!!" <<endl;
is_there = tree.p_search(25);
if(is_there == 0)
cout << "25 is not there" <<endl;
}
}
---------- Post updated at 11:24 PM ---------- Previous update was at 11:12 PM ----------
where the tongue faces are they are supposed to be a : and a "p" (due to lack of code tags)