我已经建立了一个 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,然后对 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
但最终不能正确输出。