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

时间:2015-05-03 00:31:52

标签: c++ algorithm recursion tree

这些是Tree类中的函数,我会有一个State树和Person Tree,我想在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);
}

1 个答案:

答案 0 :(得分:0)

(强制性的健全性检查:如果您出于学业原因不这样做,请改用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);
}

同样在第二次重载...你必须return来自例如find(fname, lname, n->left);

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