Such einen binären Suchbaum - Array Based

stimmen
1

Ich versuche, für ein Wort rekursiv mit einem Schlüsselwert zu suchen. In abrufen Funktion: Problem ist der Index von 0 geht, 1,3,7, bis 15 .... es 0,1,3,7,8 zu gehen nehme und so weiter habe ich den Einsatz wie erwartet funktioniert. Ich habe das inorder, Vorbestellungen, alle Arbeiten. Kann jemand mir helfen, dieses Problem herauszufinden, bitte? Ich habe jetzt für 4 Tage daran gearbeitet! Ich verstehe es nach rechts links geht. Problem ist es werde nicht gleich nach links. Ich werde nur die Funktionen hinzufügen und Code Ich glaube, Sie müssen mir helfen .. Ich bin mit 2 retireve für eine rekursive tun ..

bool BST::retrieve(const char *key, data& aData) const
{

retrieve(key, aData, parent);

if (key == aData)
{
    return true;
}
else
{
    return false;
}

}

die andere abrufen

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;

} 
}

== Operatorfunktion ..

bool operator== (const data& d1, const data& d2)
{

return strcmp(d1.getName(), d2.getName()) == 0;

}

und hier ist eine meiner Header-Dateien ..

 #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

Teil der Funktion main () ..

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..

und

bool operator< (const data& d1, const data& d2)
{

return strcmp(d1.getName(), d2.getName()) < 0;


}
Veröffentlicht am 06/12/2009 um 21:03
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
2

es nehme 0,1,3,7,8 gehen

Warum erwarten Sie dieses Verhalten? Das ist keine „binäre“ Suche überhaupt. Das linke Kind von 7 wird 15 sein, das richtige Kind 16 8 ist das richtige Kind von 3 sein wird.

Ihr Code sieht richtig. Ihre Ergebnisse sehen richtig. Es ist Ihre Erwartungen, die fehlerhaft erscheinen.

Beantwortet am 06/12/2009 um 21:09
quelle vom benutzer

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