C++ 在不同类型的二叉树中搜索二叉树

C++ Searching a binary tree inside a binary tree of different type

本文关键字:二叉树 搜索 同类型 C++      更新时间:2023-10-16

这些是树类中的函数,我会有一个状态树和人物树,我想在main中说state->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::maps)。

您的第一个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);
}

同样在第二个重载中...您必须return例如以下值:find(fname, lname, n->left);.

如果您启用警告,大多数编译器会警告您此类错误 - 例如g++ -Wall海湾合作委员会。