C++ 在BST中查找第二个键
我昨天发布了一些东西,并得到了一些帮助来开始,我感觉我现在就快到了。我创建了一个BST,主键作为名称,次键作为名称。我已经成功地完成了我所需要的一切,除了搜索最低重量(次要键)。我搜索最小权重的方法是一种前序遍历,它将所有权重正确地输出到屏幕上。现在用什么技术来确定哪一个是最低的?我尝试了一些不同的if语句,并创建了一个minwt int,但我没有成功(我认为这和递归有关)。不管怎样,这是代码。我们非常感谢您一如既往的帮助。谢谢C++ 在BST中查找第二个键,c++,data-structures,binary-search-tree,C++,Data Structures,Binary Search Tree,我昨天发布了一些东西,并得到了一些帮助来开始,我感觉我现在就快到了。我创建了一个BST,主键作为名称,次键作为名称。我已经成功地完成了我所需要的一切,除了搜索最低重量(次要键)。我搜索最小权重的方法是一种前序遍历,它将所有权重正确地输出到屏幕上。现在用什么技术来确定哪一个是最低的?我尝试了一些不同的if语句,并创建了一个minwt int,但我没有成功(我认为这和递归有关)。不管怎样,这是代码。我们非常感谢您一如既往的帮助。谢谢 #include <iostream> using
#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;
}
void searchWeight(tNode* temp)
{
// DETERMINE LOWEST WEIGHT CONTAINED IN TREE
if (temp != 0)
{
cout << temp->wt << endl;
searchWeight(temp->left);
searchWeight(temp->right);
}
}
};
#包括
使用名称空间std;
类tNode
{
公众:
字符串名;
int-wt;
t节点*左,*右;
tNode()
{
左=右=0;
}
tNode(字符串名,整数wt,tNode*l=0,tNode*r=0)
{
此->名称=名称;
这个->wt=wt;
左=l;
右=r;
}
};
类B树
{
公众:
tNode*根;
b树()
{
根=0;
}
bool add(字符串名,int-wt)
{
tNode*temp=root,*prev=0;
while(温度!=0)
{
prev=温度;
如果(名称name)
{
温度=温度->左侧;
}
其他的
{
温度=温度->右侧;
}
}
如果(根==0)
{
root=新的tNode(名称,wt);
}
else if(namename)
{
prev->left=新的tNode(名称,wt);
}
否则如果(名称>上一个->名称)
{
prev->right=新的tNode(名称,wt);
}
其他的
{
返回false;
}
返回true;
}
无效搜索权重(tNode*temp)
{
//确定树中包含的最低重量
如果(温度!=0)
{
cout(左);
搜索权重(临时->右侧);
}
}
};
您需要一些临时变量来保存最低权重和相关键。它们需要在searchWeight()
函数的作用域之外进行访问。例如:
#include <iostream>
using namespace std;
int lowest_weight = 999999; // Something sufficiently high
string lowest_weight_key;
class tNode
{
/*...*/
void searchWeight(tNode* temp)
{
// DETERMINE LOWEST WEIGHT CONTAINED IN TREE
if (temp != 0)
{
// if temp->wt is lower than lowest weight
// set lowest_weight equal to temp->wt
// and set lowest_weight_key equal to temp->name
cout << temp->wt << endl;
searchWeight(temp->left);
searchWeight(temp->right);
}
}
};
#包括
使用名称空间std;
int最低重量=999999;//足够高的东西
字符串最低重量键;
类tNode
{
/*...*/
无效搜索权重(tNode*temp)
{
//确定树中包含的最低重量
如果(温度!=0)
{
//如果温度->重量低于最低重量
//设置最低重量等于温度->重量
//并将最低重量键设置为temp->name
cout(左);
搜索权重(临时->右侧);
}
}
};
现在,在调用
searchWeight()
之后,只需打印出lowest\u weight
和lowest\u weight\u key
的值,您需要一些临时变量来保存最低权重和相关键。它们需要在searchWeight()
函数的作用域之外进行访问。例如:
#include <iostream>
using namespace std;
int lowest_weight = 999999; // Something sufficiently high
string lowest_weight_key;
class tNode
{
/*...*/
void searchWeight(tNode* temp)
{
// DETERMINE LOWEST WEIGHT CONTAINED IN TREE
if (temp != 0)
{
// if temp->wt is lower than lowest weight
// set lowest_weight equal to temp->wt
// and set lowest_weight_key equal to temp->name
cout << temp->wt << endl;
searchWeight(temp->left);
searchWeight(temp->right);
}
}
};
#包括
使用名称空间std;
int最低重量=999999;//足够高的东西
字符串最低重量键;
类tNode
{
/*...*/
无效搜索权重(tNode*temp)
{
//确定树中包含的最低重量
如果(温度!=0)
{
//如果温度->重量低于最低重量
//设置最低重量等于温度->重量
//并将最低重量键设置为temp->name
cout(左);
搜索权重(临时->右侧);
}
}
};
现在,在调用
searchWeight()
之后,只需打印出lowest\u weight
和lowest\u weight\u key
的值,如果遍历工作正常,那么您就达到了99%。您需要一个变量来保存最低的权重和最低的键--仅当树中的对象满足适当的条件时设置它们,然后在遍历完成时输出它们。谢谢Chad,这是我一直在尝试的,但它无法正常工作。不过,我会继续胡闹,现在我知道我走在正确的轨道上。我已经提供了一个答案,并给出了如何实现的提示。如果你的遍历工作正确,那么你就达到了99%。您需要一个变量来保存最低的权重和最低的键--仅当树中的对象满足适当的条件时设置它们,然后在遍历完成时输出它们。谢谢Chad,这是我一直在尝试的,但它无法正常工作。不过,我会继续胡闹,现在我知道我走在正确的轨道上。我已经提供了一个答案,并提示如何实施。太棒了,它成功了。谢谢我也在做类似的事情,只是没有把变量放在方法之外。太棒了,它开始工作了。谢谢我也在做类似的事情,只是没有把变量放在方法之外。