二叉搜索树键/值对-我知道值,但不知道关键的c++
Binary Search Tree key/value pair - I know the value but not the key C++
我有一个简单的问题,我很困惑。我知道在二叉搜索树中有一个键/值对的概念,以及树在构建时的样子。
我不确定的是,如果我不知道它的键是什么,如何在这样的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:要查找的值
所以通常我们可以根据所需的键进行搜索,而不是根据与键相关的值进行搜索
相关文章:
- 努力将整数转换为链表。不知道我在这里做错了什么
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 叮当不知道PTRDIFF_MAX?
- 如何在不知道向量大小的情况下输入向量内部的向量?
- 我正在尝试使用 c++ 创建一个货币转换程序,我不知道如何继续
- 不知道某个东西是否被忽略会引入未定义的行为吗
- 如何在C++中读取空格分隔的输入 当我们不知道输入的数量时
- 我不知道这条线是做什么的
- 如何在不知道C++中有多少可选参数的情况下在循环中使用va_arg?
- 在不知道套接字的情况下关闭网络连接
- 如果我不知道每个列表中有多少个数字,我如何将给定数量的数字列表作为输入?
- 我不知道导致错误的原因 (C3074)
- 我不知道为什么这段代码会让核心被转储?
- 我正在尝试制作一个自平衡机器人,但编译时存在错误。我不知道如何解决它
- 循环通过网格获取温度,但不知道如何告诉程序停止循环
- 如何在不知道对应关系的情况下在字符串中搜索字符并将其分配给另一个字符?
- 反转字符串.不知道为什么这个逻辑是错误的.C++
- 不知道如何在家庭作业任务中实现一件事
- 如何在不知道属性具有哪些构造函数的情况下初始化属性?