Προσπαθώ να αναζητήσετε μια λέξη, χρησιμοποιώντας ένα κλειδί αξία αναδρομικά. Στην ανάκτηση της λειτουργίας: Το πρόβλημα είναι ο δείκτης πηγαίνει από 0, 1,3,7, 15 .... είναι ας υποθέσουμε ότι για να πάει 0,1,3,7,8 και ούτω καθεξής έχω το ένθετο λειτουργεί όπως θα έπρεπε. Έχω την inorder, προπαραγγελίες, όλα εργασίας. Μπορεί κάποιος παρακαλώ να με βοηθήσει να καταλάβω αυτό το πρόβλημα; Έχω ήδη εργάζονται σε αυτό για 4 ημέρες τώρα! Καταλαβαίνω πηγαίνει αριστερά προς τα δεξιά. Πρόβλημα είναι ότι δεν θα πάει αμέσως μετά αριστερά. Θα προσθέσω μόνο τις λειτουργίες και τον κωδικό Νομίζω ότι θα πρέπει να με βοηθήσει .. Είμαι με τη χρήση 2 retireve για να κάνει μια αναδρομική ..
bool BST::retrieve(const char *key, data& aData) const
{
retrieve(key, aData, parent);
if (key == aData)
{
return true;
}
else
{
return false;
}
}
η άλλη ανάκτηση
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;
}
}
== λειτουργία φορέα ..
bool operator== (const data& d1, const data& d2)
{
return strcmp(d1.getName(), d2.getName()) == 0;
}
και εδώ είναι ένα από τα αρχεία κεφαλίδας μου ..
#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
μέρος του κυρίως () λειτουργία ..
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..
και
bool operator< (const data& d1, const data& d2)
{
return strcmp(d1.getName(), d2.getName()) < 0;
}













