C++ 在BST中查找第二个键

C++ 在BST中查找第二个键,c++,data-structures,binary-search-tree,C++,Data Structures,Binary Search Tree,我昨天发布了一些东西,并得到了一些帮助来开始,我感觉我现在就快到了。我创建了一个BST,主键作为名称,次键作为名称。我已经成功地完成了我所需要的一切,除了搜索最低重量(次要键)。我搜索最小权重的方法是一种前序遍历,它将所有权重正确地输出到屏幕上。现在用什么技术来确定哪一个是最低的?我尝试了一些不同的if语句,并创建了一个minwt int,但我没有成功(我认为这和递归有关)。不管怎样,这是代码。我们非常感谢您一如既往的帮助。谢谢 #include <iostream> using

我昨天发布了一些东西,并得到了一些帮助来开始,我感觉我现在就快到了。我创建了一个BST,主键作为名称,次键作为名称。我已经成功地完成了我所需要的一切,除了搜索最低重量(次要键)。我搜索最小权重的方法是一种前序遍历,它将所有权重正确地输出到屏幕上。现在用什么技术来确定哪一个是最低的?我尝试了一些不同的if语句,并创建了一个minwt int,但我没有成功(我认为这和递归有关)。不管怎样,这是代码。我们非常感谢您一如既往的帮助。谢谢

#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,这是我一直在尝试的,但它无法正常工作。不过,我会继续胡闹,现在我知道我走在正确的轨道上。我已经提供了一个答案,并提示如何实施。太棒了,它成功了。谢谢我也在做类似的事情,只是没有把变量放在方法之外。太棒了,它开始工作了。谢谢我也在做类似的事情,只是没有把变量放在方法之外。