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&lt;string, tree&lt;string, object&gt;&gt;(带有虚构类型tree)?您应该编辑您的问题以添加所有这些详细信息并使其更具可读性(即使用空格和 Shift 键和代码块来显示您当前的代码),以便我们可以回答您而不会因为试图理解您的问题而头疼。 【参考方案1】:

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

如果您启用警告,大多数编译器都会警告您此类错误 - 例如g++ -Wall 为 GCC。

【讨论】:

我实际上只是检查了空 ptrs,什么都没有 @Mostafa:编码是一件很奇怪的事情——你通常必须在它开始工作之前修复所有的错误——你是否也添加了返回语句?如果它仍然坏了,如果你需要进一步的帮助,你实际上不得不告诉我们更多的信息.​​.....

以上是关于C ++在不同类型的二叉树中搜索二叉树的主要内容,如果未能解决你的问题,请参考以下文章

使用C在搜索二叉树中查找最长路径

二叉树入门知识——一篇了解二叉树

史上最详细的二叉树B树,看不懂怨我

二叉搜索树的深度与搜索效率图解

在Java中实现二叉树

在二叉树中插入元素