Căutarea unui binar de căutare copac - Array Bazat

voturi
1

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;


}
Întrebat 06/12/2009 la 21:03
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
2

ea presupune să meargă 0,1,3,7,8

De ce vă așteptați acest comportament? Asta nu e un „binar“ de căutare, la toate. Copilul din stânga al 7 va fi de 15, copilul din dreapta va fi 16. 8 este dreptul copilului de 3.

Codul dvs. pare corect. Rezultatele arată corect. Este așteptările dumneavoastră care apar eronate.

Publicat 06/12/2009 la 21:09
sursa de către utilizator

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