Am încercat să căutați un cuvânt folosind o valoare-cheie recursiv. În funcție de a prelua: Problema este indicele merge de la 0, 1,3,7, la 15 .... să presupunem că pentru a merge 0,1,3,7,8 și așa mai departe am insertul de lucru cum era de așteptat. Am Inorder, precomenzile, toate de lucru. Poate cineva te rog ajută-mă dau seama această problemă? Am lucrat la acest timp de 4 zile, acum! Înțeleg că merge la stânga la dreapta. Problema este că obiceiul merge imediat după plecat. Voi adăuga doar funcțiile și codul cred că va trebui să mă ajute .. Sunt folosind 2 retireve pentru a face o recursiv ..
bool BST::retrieve(const char *key, data& aData) const
{
retrieve(key, aData, parent);
if (key == aData)
{
return true;
}
else
{
return false;
}
}
celălalt prelua
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;
}
}
== funcția de operator de ..
bool operator== (const data& d1, const data& d2)
{
return strcmp(d1.getName(), d2.getName()) == 0;
}
și aici este una dintre fișierele mele header ..
#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
o parte din funcția principală () ..
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..
și
bool operator< (const data& d1, const data& d2)
{
return strcmp(d1.getName(), d2.getName()) < 0;
}













