在 BST 中搜索辅助数据
Search for secondary data in BST
我构建了一个BST,它保存了一个名称作为主要数据,以及与该名称相关的权重(就像插入信息时一样,它以Tom - 150的形式输入,但由Tom在树中排序)。 我需要能够确定谁的体重最低,但我不确定该怎么做。 下面是类和 add 方法的代码,我还有很多其他方法,但觉得没有必要发布它们,因为它们看起来不相关(如果需要,我可以)。
#include <iostream>
using namespace std;
class tNode
{
public:
string name;
int wt;
tNode *left, *right;
tNode()
{
left = right = 0;
}
tNode(string name, int wt, tNode *l = 0, tNode *r = 0)
{
this->name = name;
this->wt = wt;
left = l;
right = r;
}
};
class bSTree
{
public:
tNode *root;
bSTree()
{
root = 0;
}
bool add(string name, int wt)
{
tNode *temp = root, *prev = 0;
while (temp != 0)
{
prev = temp;
if (name < temp->name)
{
temp = temp->left;
}
else
{
temp = temp->right;
}
}
if (root == 0)
{
root = new tNode(name, wt);
}
else if (name < prev->name)
{
prev->left = new tNode(name, wt);
}
else if (name > prev->name)
{
prev->right = new tNode(name, wt);
}
else
{
return false;
}
return true;
}
无论如何,这样做的技术是什么? 我通过尽可能沿着树的左侧向下移动来找到最低的名称值(按字母顺序),但我不能 100% 确定查找最低权重的技术,因为树不是按权重排序的。 我没有经验,因为我想使用 c++,我唯一能想到的就是遍历每个权重,将数据输入到 int,然后对整数进行排序以找到最低的。 我无法想象这是正确的方法,或者至少是最有效的方法。 任何帮助总是不胜感激的。 谢谢!
编辑:这是我到目前为止想出的:
void searchWeight(tNode* temp)
{
// DETERMINE LOWEST WEIGHT CONTAINED IN TREE
if (temp != 0)
{
cout << temp->wt << endl;
searchWeight(temp->left);
searchWeight(temp->right);
}
}
这会将所有权重输出到控制台,但我不确定如何遍历每个权重并确定最低权重。 我试过在那里放另一个 if 语句
if(currwt < minwt)
minwt = currwt
但最终它正确输出没有运气。
您不必对树进行排序即可获得具有最小权重的节点。只需遍历树并存储重量最低的人和重量最低的人。如果当前节点的权重小于最小权重,请更新这两个变量。在遍历结束时,您的权重最低。
伪代码将如下所示:
minWeight = 0
minWeightPerson = ""
for each node in the tree:
if ( minWeight > weight of current node):
minWeight = weight of current node
minWeightPerson = person in current node
return minWeightPerson
您需要遍历整个 BST,因为您不是按树的主键进行搜索。您可以使用任何树遍历算法。
如果您需要按权重进行大量搜索(并且简单地搜索整个树还不够快),那么构建一个"索引"是值得的,即第二个 BST 指向第一个 BST 中的节点,但在辅助键上排序。
遍历树一次是O(n)
,但遍历树的m次是O(m*n)
。构建第二个具有不同索引的二叉搜索树将是O(n*log(n))
,然后搜索第二个树m
次将是O(m*log(n))
,所以整个操作是O(n*log(n)+m*log(n)) = O((n+m)*log(n))
的。
- C++ 中具有 O(1) 搜索时间复杂度的数据结构
- 为什么当我尝试搜索双链表中第一个数据条目之外的数据时,程序崩溃了?
- 如何打印在二叉搜索树中找到的数据?
- 查找存储在二叉搜索树的所有非叶子中的数据总和?(返回整数的独立递归函数
- 将数据从C++程序发布到弹性搜索
- C++ Eclipse:二叉搜索树节点>数据=变量似乎不起作用
- 在结构向量中搜索一个数据成员,然后打印匹配的所有数据成员
- 如何将图像数据从搜索窗口中移动到本地存储器OpenCL
- 如何以json格式保存弹性搜索的数据
- 在树结构中搜索数据
- 二进制搜索树插入垃圾数据
- STL:在大量数据中进行分类和搜索
- 用于高效搜索的数据结构
- 二叉搜索树插入数据问题
- 多种搜索组合的数据结构设计
- 从文件中提取的数据中的C 搜索字符串失败
- 通过多个标签搜索数据集
- 将数据从文件读取到链接列表中,并在链接列表中搜索元素
- 哪种数据结构是在一个向量中搜索和计数对象对的最佳数据结构
- 数组、矢量、映射和列表数据搜索