2014-11-15 3 views
1

Я дал следующие функции для записиКак преобразовать сопзЬ к не сопзЬ

T getMinimum() const {} 

и я должен использовать следующую вспомогательную функцию

void getMinimumHelper(Node * subtree, Node * &Location) const {} 

Однако, я никогда не знал, как передать такую ​​функцию. У меня есть двоичный класс дерева поиска с узлом в качестве члена класса BST. Я пробовал много вещей, таких как функция

Node * minNode = this->Node; 
Node minNode = this->getMinimumHelper(findMin, findMin); 
return minNode->data; 

Helper:

void getMinimumHelper(Node * subtree, Node * &Location) const { 
    if (subtree == NULL){ 
     Location = NULL; 
    } 
    if (subtree->left == NULL){ 
     Location = subtree; 
    } 
    else{ 
     getMinimumHelper(subtreeRoot->left, subtree); 
    } 
} 

однако я незаконно, справа «->» и конечно вспомогательной функции является недействительным по какой-либо потому что он фактически ничего не возвращает. Я работаю над этим часами и ничего не добился и не могу понять это. И у меня есть еще много функций с вспомогательными функциями вроде этого, и я понятия не имею, что делать.

Класс:

template <class T> 
class { 
private: 
    class Node { 
    public: 
     T data; 
     Node * left; 
     Node * right; 
     Node * parent; 

     Node() :left(NULL), right(NULL), parent(NULL) {}; 
     Node(const T& item) { 
      data = item; 
      left = NULL; 
      right = NULL; 
      parent = NULL; 
     }; 
    }; 
public: 
    BST(); 
    BST(BST&); 

    ~BST(); 

    bool isEmpty() const; 
    bool search(const T&) const; 
private: 
    Node * _root; 

    void getMaximumHelper(Node *, Node * &) const; 
    void getMinimumHelper(Node *, Node * &) const; 
}; 
+0

В чем проблема? Вы должны написать getMinimum()? – Venkatesh

+0

Я предполагаю, что параметр Node * & minLocation в getMinimumHelper() - это то, где вы получите Node *, где значение min найдено. Передайте поддерево Node * в качестве первого параметра, в котором вы хотите узнать значение min in и получить Node * в обратном направлении, где min значение, я думаю, это то, как эта вспомогательная функция разработана. Узел * minNode = новый узел(); this-> getMinimumHelper (this-> Node, minNode); return minNode-> данные; – user1

+0

Да, я понимаю, что это то, что мне нужно сделать, моя проблема заключается в передаче параметров в getMinimumHelper(), я знаю, что это BST, и поэтому самый левый узел должен быть минимальным значением, однако поскольку getMinimum() является const, я не могу использовать это value (просто попробовал этот указатель, this-> node) в моей функции getMinimumHelper, и я не могу найти способ изменить его, чтобы я мог. – user3376703

ответ

0
template <class T> 
T BinarySearchTree<T>::getMinimum() const { 
    Node * minNode; 
    getMinimumHelper(_root, minNode); 
    return minNode->data; 
}; 
+0

Предполагая, что - поскольку он имеет ссылку на указатель узла - 'getMinimumHelper()' изменяет свой второй параметр на месте, вы обманываете память. «Новый элемент Node()« лишний ». –

+0

Правильно, мы действительно не знаем, как реализуется getMinimumHelper()! Это просто быстрая тренировка. – user1

+1

@ user3376703, Можете ли вы разместить getMinimumHelper()? – user1

Смежные вопросы