Ik probeer om te zoeken naar een woord met behulp van een sleutel waarde recursief. In ophalen functie: Het probleem is dat de index gaat van 0, 1,3,7, tot 15 .... het veronderstellen te gaan 0,1,3,7,8 enzovoort ik heb de insert werkt zoals verwacht. Ik heb de inorder, preorders, alle werken. Kan iemand me helpen uitzoeken dit probleem? Ik heb gewerkt aan dit voor 4 dagen nu! Ik begrijp dat het links gaat naar rechts. Probleem is het gewoon gaan direct na verlaten. Ik zal alleen maar de functies en de code ik denk dat je nodig hebt om me te helpen .. Ik gebruik 2 retireve voor het doen van een recursieve ..
bool BST::retrieve(const char *key, data& aData) const
{
retrieve(key, aData, parent);
if (key == aData)
{
return true;
}
else
{
return false;
}
}
de andere op te halen
bool BST::retrieve(const char *key, data &aData, int parent) const
{
if (!items[parent].empty )
{
if (key == items[parent].instanceData.getName())
{
aData.setName(key);
return true;
}
else if (key < items[parent].instanceData.getName() ) // changed -- now goes from 0,2,6 suppose to go to o,2,5
{
parent =(2*parent) + 1;
retrieve(key, aData, parent);
}
else
{
parent =( 2*parent) + 2;
retrieve(key, aData, parent);
}
// return 0;
}
}
== operator functie ..
bool operator== (const data& d1, const data& d2)
{
return strcmp(d1.getName(), d2.getName()) == 0;
}
en hier is een van mijn header files ..
#include data.h
class BST
{
public:
BST(int capacity = 5); // constructor (default if no arg supplied)
BST(const BST& aTable); // copy constructor
~BST(); // destructor
void insert(const data& aData);
bool remove(const char *key);
bool retrieve(const char *key, data& aData) const;
void displayArrayOrder(ostream& out) const;
void displayPreOrder(ostream& out) const;
void displayInOrder(ostream& out) const;
void displayPostOrder(ostream& out) const;
int getSize(void) const;
private:
int size;
int maxsize;
int parent;
void expand();
struct item
{
bool empty;
data instanceData;
bool isLeaf;
};
item *items;
void insert(int index, const data & aData );
void displayHeaders(ostream& out)const;
void BST::displayPreOrder(std::ostream &out, int parent)const;
void BST::displayInOrder(std::ostream &out, int parent)const;
void BST::displayPostOrder(std::ostream &out, int parent)const;
bool BST::retrieve(const char *key, data& aData, int parent) const;
void itemsPrinted(ostream &out,int size)const;
};
#endif // BST_H
van de main () functie ..
database.insert(data(Ralston, Anthony));
database.insert(data(Liang, Li));
database.insert(data(Jones, Doug));
database.insert(data(Goble, Colin));
database.insert(data(Knuth, Donald));
database.insert(data(Kay, Alan));
database.insert(data(Von Neumann, John));
database.insert(data(Trigoboff, Michael));
database.insert(data(Turing, Alan));
displayDatabase(true);
retrieveItem(Trigoboff, Michael, aData);
retrieveItem(Kaye, Danny, aData); // calls search function..
en
bool operator< (const data& d1, const data& d2)
{
return strcmp(d1.getName(), d2.getName()) < 0;
}













