繁体   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