簡體   English   中英

C ++在不同類型的二叉樹中搜索二叉樹

[英]C++ Searching a binary tree inside a binary tree of different type

這些是Tree類中的函數,我要有一個State樹和Person Tree,我想在main中說states-> find(fname,lname),所以TreeType的類型為State,因為狀態的類型為state。 但是,當TreeType是Person類型時,會發生錯誤,盡管我僅在State類型時才調用該函數。

Person * find(string fname, string lname, node<Person> * n) {
if(n->data->lname == lname && n->data->fname == fname)
  return n->data;
else if(n->data->lname > lname)
  find(fname, lname, n->left);
else
  find(fname, lname, n->right);
}

Person * find(string fname, string lname, node<TreeType> * n) {
  node<Person> * temp = n->data->people->root;
  Person * p = find(fname, lname, temp);
  if(p != NULL)
    return p;
  find(fname, lname, n->left);
  find(fname, lname, n->right);
}

Person * find(string fname, string lname) {
  return find(fname, lname, root);
}

(強制性完整性檢查:如果您出於學術原因不這樣做,請改用std::map )。

您的第一個find重載需要從遞歸調用中返回值,並處理nnullptr ,而不是取消對它的引用。

Person * find(string fname, string lname, node<Person> * n) {
  if (!n)
    return n;
  if(n->data->lname == lname && n->data->fname == fname)
    return n->data;
  if(n->data->lname > lname)
    return find(fname, lname, n->left);
  return find(fname, lname, n->right);
}

同樣,在第二次重載中,您必須從例如find(fname, lname, n->left); returnfind(fname, lname, n->left);

如果啟用警告,大多數編譯器會警告您有關此類錯誤的信息-例如,GCC的g++ -Wall

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM