I've asked the same Question here http://stackoverflow.com/questions/34422852/debug-assertion-failed-binary-search-tree
IM IN DESPERATE NEED OF HELP.
Im working on a project, What I want is to get data from a database (MySql) and store it in a Tree. And be able to do insertion, deletion or updates on the nodes, if any of these commands are performed on a tree then changes must reflect on the database as well. (via Windows Form)
UPDATED
This error shows up when I do the search Via search button
Debug Assertion Failed!
here's my tree code:
just showing the insertion module.
Btree.cpp
#include "Btree.h"
Btree::Btree()
{
root = NULL;
rootnum = NULL;
}
Btree::~Btree(){
delete root;
}
bool Btree::isEmpty() const {
return root == NULL;
}
bool Btree::isnumEmpty() const {
return rootnum == NULL;
}
string Btree::treeSearch(string name){
if (name == "Syed")
MessageBox::Show(" Syed is present ");
bool found = false;
if (isEmpty())
{
MessageBox::Show( " This Tree is empty! " );
}
node* curr;
node* parent;
curr = root;
while (curr != NULL)
{
if (curr->strname == name)
{
found = true;
return name;
break;
}
else
{
parent = curr;
if (name>curr->strname) curr = curr->right;
else curr = curr->left;
}
}
if (!found)
{
MessageBox::Show(" Data not found! ");
}
}
void Btree::insert(string d)
{
node* t = new node;
node* parent;
t->strname = d;
t->left = NULL;
t->right = NULL;
parent = NULL;
MessageBox::Show(" pointer is in insert ");
// is this a new tree?
if (isEmpty()){
root = t;
MessageBox::Show(" Root sval chngd ");
}
else
{
MessageBox::Show(" storing val ");
//Note: ALL insertions are as leaf nodes
node* curr;
curr = root;
// Find the Node's parent
while (curr)
{
parent = curr;
if (t->strname > curr->strname) curr = curr->right;
else curr = curr->left;
}
if (t->strname < parent->strname)
parent->left = t;
else
parent->right = t;
}
}
Btree.h
#include <iostream>
#include <string>
using namespace std;
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
#ifndef Btree_H
#define Btree_H
class Btree{
private:
typedef struct node{
string strname;
string strnum;
node* left;
node* right;
node* Lnum;
node* Rnum;
};
node* root;
node* rootnum;
public:
//constructor
Btree();
~Btree();
public:
void insert(string);
void remove(string);
string treeSearch(string);
//void insertnum(string);
bool isEmpty() const;
bool isnumEmpty() const;
};
#endif
my Form's coding FOR INSERTION:
private: System::Void FetchData_Click(System::Object^ sender, System::EventArgs^ e) {
Btree t;
//String^ a;
String^ c = "Syed";
std::string ststring = msclr::interop::marshal_as<std::string>(c);
t.insert(ststring);
}
For Search Button coding:
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
String^ name = namep->Text;
//String^ st = namep->Text;
Btree t;
//conversion
std::string ststring = msclr::interop::marshal_as<std::string>(name);
string iftrue = t.treeSearch(ststring);
//string iftrue = "Syed";
String^ str2 = gcnew String(iftrue.c_str());
if (str2 != "n"){
String^ constring = L"datasource=localhost;port=3306;username=root;password=bu123";
MySqlConnection^ conDataBase = gcnew MySqlConnection(constring);
MySqlCommand^ cmdDataBase = gcnew MySqlCommand("select * from telephone.phonebook where PName = '" + str2 + "';", conDataBase);
MySqlDataReader^ myReader;
try{
conDataBase->Open();
myReader = cmdDataBase->ExecuteReader();
if (myReader->Read()){
String^ phone = myReader->GetString("PhoneNumber");
PN->Text = phone;
String^ phone1 = myReader->GetString("PhoneNumber1");
PN1->Text = phone1;
String^ phone2 = myReader->GetString("PhoneNumber2");
PN2->Text = phone2;
String^ phonety = myReader->GetString("PhoneNumberType");
pt->Text = phonety;
String^ phonety1 = myReader->GetString("PhoneNumberType1");
pt1->Text = phonety1;
String^ phonety2 = myReader->GetString("PhoneNumberType2");
pt2->Text = phonety2;
String^ cat = myReader->GetString("Category");
category->Text = cat;
String^ Gender = myReader->GetString("Gender");
gender->Text = Gender;
String^ Email = myReader->GetString("Email");
email->Text = Email;
String^ Adres = myReader->GetString("Address");
address->Text = Adres;
String^ ct = myReader->GetString("City");
city->Text = ct;
}
else if (!myReader->Read()){
MessageBox::Show("No such Name found!");
}
}
catch (Exception^ex){
MessageBox::Show(ex->Message);
}
}
else
MessageBox::Show("No record");
}