二进制搜索树键/值对 - 我知道值而不是键C ++

时间:2013-03-16 20:23:40

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

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

如果我不知道它的密钥是什么,我不确定如何在这样的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);
}

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:6)

如果要按值而不是键搜索,则无法利用树是二进制搜索树的事实。因此,您没有其他选择,只能使用BFS迭代整个树。

答案 1 :(得分:1)

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

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

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

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

其中params是节点:树的根&amp; :要搜索的值。

因此,我们通常可以根据所需的密钥进行搜索,但不能使用密钥进行相关的搜索。