c++ - 搜索二叉搜索树

标签 c++ binary-search-tree

我正在尝试在键中查找名称。我认为它恢复得很好。但是,它出现时未找到。也许我的代码某处有误?

if (database.retrieve(name, aData))  // both contain the match

main()

static void retrieveItem(char *name, data& aData)
{
cout << ">>> retrieve " << name << endl << endl;
if (database.retrieve(name, aData))            // name and aData both contain the match
    cout << aData << endl;
else
    cout << "not found\n";
cout << endl;
     }

     static void removeItem(char *name)
    {
cout << ">>> remove " << name << endl << endl;
if (database.remove(name))
    cout << name << " removed\n";
else
    cout << name << " not found\n";
cout << endl;
    }

   int main()
   {
   #ifdef _WIN32
// request memory leak report in Output Window after main returns
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
   #endif

data    aData;


     << "Database Of Great Computer Scientists\n\n";

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);

removeItem("Ralston, Anthony");
displayDatabase(true);

检索函数...

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

for(int index=0; index < maxsize+1; index++)
{

    if (!items[index].empty) 
    {


        if ( items[index].instanceData == key )
        {
            aData.setName(key);
            return true;                   // doesn't return right away
        }


    }

}


 }

并在data.cpp中定义

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

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

}

所以当我认为它应该正常工作时,main() 中的这段代码就是它说找不到的地方。 name 和 aData 都包含找到的正确名称..

static void retrieveItem(char *name, data& aData)
{
cout << ">>> retrieve " << name << endl << endl;
if (database.retrieve(name, aData))            // name and aData both contain the match
    cout << aData << endl;
else
    cout << "not found\n";
cout << endl;
     }

最佳答案

您应该使用 BST 在树中导航 - 而不是像其他人所说的那样遍历数组中的每个项目。尝试类似的东西:

bool retrieve(key, aData)
  retrieve(key, aData, parent)
  if (key == aData)
    return true
  else
    return false

bool retrieve(key, aData, parent)
  if (key == items[parent].name)
    aData.setName(key)
  else if (key < items[parent].name)
    retrieve(key, aData, 2*parent+1)
  else
    retrieve(key, aData, 2*parent+2)

那应该很好用! :)

关于c++ - 搜索二叉搜索树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1853082/

相关文章:

c++ - 在 wxpython 中打开 Excel

c++ - C++中的二叉搜索树复制构造函数

c - 在这种情况下我将如何声明一个新结构?

java - 递归二叉搜索树插入

algorithm - 当我们提前估计时的二叉搜索树插入顺序

c++ - 基于数据集合执行二叉树搜索

C++在特定行号的文件中插入一行

android - 来自 glUniform1i 的无法解释的 GL_INVALID_OPERATION(OpenGL 认为 int 是 float?)

c++ - OpenCV皮肤检测色彩空间?

c++ 指向另一个类错误的指针 "no operator matches these operands."