Jeg er for tiden problemer med å sette inn en node i et binært tre ved hjelp av rekursjon. Jeg har vært å dvele ved dette problemet i et par dager nå, og tenkte at det var på tide jeg kom på jakt etter svar!
Nodeklassen (.h):
#ifndef STUDENT_MACROGUARD
#define STUDENT_MACROGUARD
#include <cstdlib>
#include <string>
namespace student_class
{
class student
{
public:
// Constructors / Destructors;
student(const float entry = 0, std::string name = ,
student* left_ptr = NULL, student* right_ptr = NULL);
~student(void){};
// Mutating member functions;
void set_grade(const float entry);
void set_name(std::string entry);
void set_left(student* node_ptr);
void set_right(student* node_ptr);
// Non mutating member functions;
float grade(void);
std::string name(void);
student* left(void);
student* right(void);
// Const member functions;
const student* left(void) const;
const student* right(void) const;
private:
std::string student_name;
float grade_field;
student* left_ptr;
student* right_ptr;
};
}
#endif
BSTree klasse å implementere binærtreet datastrukturen (.h):
#ifndef BTTree_MACROGUARD
#define BTTree_MACROGUARD
#include <cstdlib>
#include <string>
#include <iostream>
#include student.h
using namespace student_class;
namespace BTTree_class
{
class BTTree
{
public:
// Constructors / Destructors;
BTTree(student* node_ptr = NULL);
~BTTree(void);
// Mutating member functions;
void insert(student* node_ptr = NULL, const float grade = 0, std::string name = );
void remove(student* node_ptr);
// Non mutating member functions;
student* grade_search(const float entry);
student* name_search(const std::string entry);
student* root(void);
void print_tree(student* node_ptr);
// Const member functions;
const student* grade_search(const float entry) const;
const student* name_search(const float entry) const;
const student* root(void) const;
private:
student* root_ptr;
};
}
#endif
innsats funksjon implementering Jeg bruker å sette noder i treet på:
void BTTree::insert(student* node_ptr, const float grade, std::string name)
{
if(root_ptr == NULL)
{
root_ptr = new student(grade, name);
return;
}
if(node_ptr == NULL)
{
node_ptr = new student(grade, name);
return;
}
else if(node_ptr->grade() > grade)
{
insert(node_ptr->left(), grade, name);
}
else
{
insert(node_ptr->right(), grade, name);
}
}
Jeg forstår ikke hvorfor dette innsetting ikke fungerer. Koden ser feilfri og det er igjen meg skrape hodet mitt. Jeg har skrevet en alternativ innsetting funksjon som bruker iterasjon, men rekursjon er et must.
Eventuelle hjelpe ville være fantastisk, takk.













