我有一个简单的问题,我很困惑。我知道在二进制搜索树中有一个键/值对的概念是什么,以及树在构建时的样子。
如果我不知道它的密钥是什么,我不确定如何在这样的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);
}
任何帮助都将不胜感激。
答案 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; 键:要搜索的值。
因此,我们通常可以根据所需的密钥进行搜索,但不能使用密钥进行相关的搜索。