1

我昨天发布了一些东西并得到了一些帮助来开始,我觉得我现在差不多了。我创建了一个 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);
        }
    }
};
4

1 回答 1

1

您需要一些临时变量来保存最低权重和关联键。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);
        }
    }
};

lowest_weight现在,只需lowest_weight_key在调用searchWeight().

于 2013-11-08T20:29:10.107 回答