Søke et binært søketre - Array Based

stemmer
1

Jeg prøver å søke etter et ord ved hjelp av en nøkkelverdi rekursivt. I hente funksjon: Problem er indeksen går fra 0, 1,3,7, til 15 .... det vel å gå 0,1,3,7,8 osv jeg har innsatsen fungerer som forventet. Jeg har inorder, forhåndsbestillinger, alt fungerer. Kan noen vennligst hjelpe meg finne ut av dette problemet? Jeg har jobbet med dette i 4 dager nå! Jeg forstår det går venstre til høyre. Problemet er det wont gå rett etter igjen. Jeg vil bare legge til funksjoner og koden jeg tror du må hjelpe meg .. Jeg bruker to retireve for å gjøre en rekursiv ..

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

retrieve(key, aData, parent);

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

}

den andre hente

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;

} 
}

== operatør funksjon ..

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

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

}

og her er en av mine header filer ..

 #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

en del av hoveddelen () -funksjonen ..

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

og

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

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


}
Publisert på 06/12/2009 klokken 20:03
kilden bruker
På andre språk...                            


1 svar

stemmer
2

det skal vel gå 0,1,3,7,8

Hvorfor venter du dette problemet? Det er ikke en "binær" søk i det hele tatt. Den venstre barn av 7 vil være 15, rett barnet vil være 16. 8 er rett barn av tre.

Koden ser riktig. Dine resultater ser riktig. Det er dine forventninger som vises feil.

Svarte 06/12/2009 kl. 20:09
kilden bruker

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