二叉搜索树键/值对-我知道值,但不知道关键的c++

Binary Search Tree key/value pair - I know the value but not the key C++

本文关键字:不知道 c++ 我知道 搜索树 值对      更新时间:2023-10-16

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

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

例如:

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

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

我也可以给你一个如何初始化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);
}

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

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

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

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

 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);
  }   

,其中参数为节点:树的根&key:要查找的值

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

相关文章: