найти узел с минимальным значением в бинарном дереве поиска (вывести этот узел) - PullRequest
0 голосов
/ 14 апреля 2020

Мне нужно найти узел с минимальным значением в бинарном дереве поиска. Я написал функцию, но не могу отобразить узел с минимальным значением. Это дерево

struct Node
{
    int key; 
    void *info; 
    Node *left, *right;
};

и это функция

Node* findMin(Node* r)
{
    if (r == 0)
        return 0;
    else if (r->left == 0)
        return r;
    else
        return findMin(r->left);
}

Я вызываю такую ​​функцию в основном файле:

Node *root = makeTree(); // I enter the values and insert them into a binary search tree with an insert function.
root = findMin(root);
cout << root;

Она отображает адрес, а не значение. Что я должен сделать, чтобы отобразить узел с минимальное значение?

Ответы [ 3 ]

0 голосов
/ 14 апреля 2020
int minValue(struct node* node)  
{  
    struct node* current = node;  

    /* loop down to find the leftmost leaf */
    while (current->left != NULL)  
    {  
        current = current->left;  
    }  
    return(current->data);  
}
0 голосов
/ 17 апреля 2020

Отображает адрес, а не значение. Что я должен сделать для отображения узла с минимальным значением?

Это потому, что вам нужно разыменовать указатель для отображения значения , Внутри вашей основной функции:

Node *root = makeTree();
root = findMin(root);
if (root)
    cout << root->key;
else
    cout << "Tree empty\n";
0 голосов
/ 14 апреля 2020

В этом операторе

root = findMin(root);

вы перезаписываете указатель на узел root дерева.

Функция может выглядеть следующим образом

Node * findMin( Node *node )
{
    return node == nullptr || node->left == nullptr ? node : findMin( node->left );
}

Для отображения найденного значения введите

auto node = findMin( root );

if ( node ) std::cout << node->key << '\n';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...