【问题标题】:Binary Search Tree key/value pair - I know the value but not the key C++二叉搜索树键/值对 - 我知道值但不知道键 C++
【发布时间】:2013-03-16 20:23:39
【问题描述】:

我有一个简单的问题让我感到困惑。我知道在二叉搜索树中拥有键/值对是什么概念,以及树在构建时的样子。

如果我不知道它的键是什么,我不确定如何在这样的 BST 中搜索一个值?

例如:

假设我有一个充满整数(作为值)和唯一整数(作为键)的二叉搜索树。假设我想计算特定整数(比如说:200)在这个 BST 中出现的次数。所以我知道,200 是“价值”而不是“关键”。 因此我根本不知道钥匙。

我现在如何搜索整个 BST 中的所有“200”? 它现在变成一个简单的 BST 并且我根本不需要密钥吗?但同样,树是使用“键”而不是值排列到左孩子和右孩子的。

我还可以给你一个我如何初始化 BST 的代码示例:

void insertNode(TreeNode *&p, int key, int value)
{
  if (p == NULL) {
    p = new TreeNode;
    p->key = key;
    p->value = value;
    p->left = NULL;
    p->right = NULL;
    return;
  }

  if (key < p->key)
    insertNode(p->left, key, value);
  else
    insertNode(p->right, key, value);
}

任何帮助将不胜感激。

【问题讨论】:

  • 您应该说明您正在使用哪种语言(计算机语言)进行编程。并且该语言作为您问题的标签。
  • 很抱歉。我现在已经完成了编辑。
  • 如果您正在搜索 values,那么您可以在实现/概念中​​交换 keyvalue 或您根本不需要存储密钥并只使用值。

标签: c++ algorithm data-structures binary-search-tree key-value


【解决方案1】:

如果您想按值而不是键进行搜索,则不能利用树是二叉搜索树这一事实。因此,您别无选择,只能使用 BFS 遍历整个树。

【讨论】:

  • 感谢您的回复。这就是我的想法,但不确定。我仍然不确定该怎么做。由于不必使用密钥的事实,这显然不是真正有用的东西。这意味着如果给我们这样一棵树,并被要求搜索一个值而不是一个键,我们除了标准搜索方法之外别无他法,二叉搜索树的概念就消失了?不好。
【解决方案2】:

二叉搜索树(BST)对于存储数据以便快速访问、存储和删除非常有用。二叉搜索树中的数据存储在树节点中,并且必须与它们关联一个序数值;这些键用于构造树,使得左子节点的值小于父节点的值,右子节点的值大于父节点的值。有时,keydatum 是相同的。

典型的键值包括简单的整数或字符串,键的实际数据将取决于应用程序。让我们考虑一个存储字符串/双精度对的二叉搜索树。也就是说,键是字符串值,与键关联的数据是双精度值。开发者可以使用字符串值搜索树。

在这种情况下,基本的递归搜索算法如下所示:

 node search (node, key) {
   if node is null then return null;

   if node.key = key then
      return node

   if key < node then
      return search (node.left, key);
   else
      return search (node.right, key);
  }   

参数在哪里 node:树的根 & key:要搜索的值。

所以通常我们可以根据所需的键而不是键的关联值进行搜索。

【讨论】:

  • 感谢 Srikanth 的回复,但同样,正如我在问题中所述,我不知道密钥是什么。我只想在根本不知道任何键的情况下计算特定值在 BST 中出现的次数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-11
  • 1970-01-01
  • 1970-01-01
  • 2010-11-19
相关资源
最近更新 更多