[英]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
重載需要從遞歸調用中返回值,並處理n
為nullptr
,而不是取消對它的引用。
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);
return
值find(fname, lname, n->left);
。
如果啟用警告,大多數編譯器會警告您有關此類錯誤的信息-例如,GCC的g++ -Wall
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.