簡體   English   中英

在BST中找到第二把鑰匙

[英]Find 2nd Key in BST

我昨天發布了一些內容,並獲得了一些入門方面的幫助,感覺就像現在快到了。 我創建了一個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);
        }
    }
};

您需要一些臨時變量來保持最低的權重和關聯的鍵。 需要在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);
        }
    }
};

現在,只需在調用searchWeight()之后打印出lowest_weightlowest_weight_key的值lowest_weight

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM