Ψάχνοντας μια δυαδική αναζήτηση Δέντρο - Array Based

ψήφοι
1

Προσπαθώ να αναζητήσετε μια λέξη, χρησιμοποιώντας ένα κλειδί αξία αναδρομικά. Στην ανάκτηση της λειτουργίας: Το πρόβλημα είναι ο δείκτης πηγαίνει από 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;


}
Δημοσιεύθηκε 06/12/2009 στις 21:03
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
2

να υποθέσουμε ότι για να πάει 0,1,3,7,8

Γιατί σας περιμένουμε αυτή τη συμπεριφορά; Αυτό δεν είναι μια «δυαδική» αναζήτηση σε όλα. Το αριστερό παιδί του 7 θα είναι 15, το δικαίωμα του παιδιού θα είναι 16. 8 είναι το δικαίωμα του παιδιού 3.

Ο κωδικός σας φαίνεται σωστή. Τα αποτελέσματά σας φαίνονται σωστές. Είναι οι προσδοκίες σας που εμφανίζεται εσφαλμένη.

Απαντήθηκε 06/12/2009 στις 21:09
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more