2014-11-15 73 views
1

我一直在考慮下面的函數寫如何常量轉換爲非const的

T getMinimum() const {} 

,我必須使用下面的輔助函數

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

不過,我從來不知道如何傳遞這樣的功能。我有一個二叉搜索樹類,其中有一個節點作爲BST類的成員。我已經嘗試了很多東西,如

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

輔助功能:

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

我想,getMinimumHelper()中的參數Node *&minLocation參數是您將得到Node *的最小值所在的位置。將子樹Node *作爲第一個參數傳遞給你想要找出最小值的地方,然後得到Node *作爲最小值的返回值,我想這就是設計輔助函數的方法。 Node * minNode = new Node(); this-> getMinimumHelper(this-> Node,minNode); return minNode-> data; – user1

+0

是的我明白這就是我必須做的,我的問題是傳遞參數到getMinimumHelper(),我知道這是一個BST,因此最左邊的節點應該是最小值,但因爲getMinimum()是const我不能使用值(簡單地在我的getMinimumHelper函數中嘗試了一個this指針,this-> node),並且我無法找出一種方法來改變它,所以我可以。 – 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