C ++在不同类型的二叉树中搜索二叉树
Posted
技术标签:
【中文标题】C ++在不同类型的二叉树中搜索二叉树【英文标题】:C++ Searching a binary tree inside a binary tree of different type 【发布时间】:2015-05-03 00:31:51 【问题描述】:这些是 Tree 类中的函数,我将有一个 State 树和 Person Tree,我想说 states->find(fname,lname) 在 main 中,因此 TreeType 将是 State 类型,因为 states 是类型状态。但是当 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);
【问题讨论】:
如果您感到困惑,我们也会。您打算向您的班级用户提供的功能原型是什么? Person * (string fname, string lname); 它叫 find sorry 你的数据结构就像tree<string, tree<string, object>>
(带有虚构类型tree
)?您应该编辑您的问题以添加所有这些详细信息并使其更具可读性(即使用空格和 Shift 键和代码块来显示您当前的代码),以便我们可以回答您而不会因为试图理解您的问题而头疼。
【参考方案1】:
(强制性健全性检查:如果您出于学术原因不这样做,请改用std::map
s)。
您的第一个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);
同样在第二个重载中...您必须 return
来自例如的值find(fname, lname, n->left);
.
如果您启用警告,大多数编译器都会警告您此类错误 - 例如g++ -Wall
为 GCC。
【讨论】:
我实际上只是检查了空 ptrs,什么都没有 @Mostafa:编码是一件很奇怪的事情——你通常必须在它开始工作之前修复所有的错误——你是否也添加了返回语句?如果它仍然坏了,如果你需要进一步的帮助,你实际上不得不告诉我们更多的信息......以上是关于C ++在不同类型的二叉树中搜索二叉树的主要内容,如果未能解决你的问题,请参考以下文章