2014-02-17 36 views
0

我有一個問題,我有那些類,現在工作,因爲我在公共場合,但如果我把它放在私人,或保護和繼承到第二類,它不工作,怎麼可以我做到了嗎?類繼承或嵌套類,哪個更好?

template <typename T> 
class BinaryNode 
{ 
public: 
    T key; 
    BinaryNode<T>* left; 
    BinaryNode<T>* right; 
    BinaryNode<T>* parent; 
    BinaryNode(){} 
    ~BinaryNode(){} 
}; 

而且這樣的:

template <typename T> 
class BinarySearchTree 
{ 
private: 
    BinaryNode<T>* root; 
    BinaryNode<T>* newNode(T key); 

    BinaryNode<T>* minimum(BinaryNode<T>* node); 
    BinaryNode<T>* maximum(BinaryNode<T>* node); 
    BinaryNode<T>* successor(BinaryNode<T>* node); 

    void insert(BinaryNode<T>** node, T key); 
    BinaryNode<T>* search(BinaryNode<T>* node, T key); 
    void distance(BinaryNode<T>* node, T key); 
    void inorderTreeWalk(BinaryNode<T>* node); 
public: 
    BinarySearchTree(); 
    ~BinarySearchTree(); 

    void insert(T key); 
    BinaryNode<T>* search(T key); 
    void distance(T key); 
    void inorderTreeWalk(); 

    BinaryNode<T>* remove(BinaryNode<T>* node); 
}; 
+1

我不知道你在問什麼。但也許'BinaryNode'應該是'BinarySearchTree'的「朋友」?或者,您需要在'BinaryNode'中爲'private' /'protected'數據提供'public'訪問器。否則,你是如何期望'BinarySearchTree'訪問屬性? – Matt

+0

沒有通用的解決方案。請添加關於[你到目前爲止嘗試了什麼]的信息(http://mattgemmell.com/what-have-you-tried/),如何「爲你工作」*,並提供[SSCCE] (http://sscce.org/)(不是整個代碼庫的複製粘貼)。沒有這些信息,我們幾乎無法幫助你。 – Drop

+0

https://www.dropbox.com/s/s8xsn3q01ysyy4f/classi.h這是所有的頭文件,我如何在binarysearchtree中執行BinaryNode的所有屬性或嵌套類? – Raid3nz

回答

0

貌似節點緊密耦合到樹:

您可能使樹節點的一個朋友,或者使用一個嵌套類:

class Node { 
    private: 
    friend class Tree; 
    ... 
}; 

class Tree { 
    ... 
}; 

or

class Tree { 
    private: // maybe protected 
    class Node { 
     public: 
     ... 
    }; 
}; 
+0

dropbox.com/s/s8xsn3q01ysyy4f/classi.h這是所有的頭文件,我如何在binarysearchtree中執行BinaryNode的所有屬性或嵌套類? – Raid3nz

0

您可以爲節點設置可訪問的「getter」函數,以便您可以遍歷二叉搜索樹中的樹。

template <typename T> 
class BinaryNode 
{ 
private: 
    T key; 
    BinaryNode<T>* left; 
    BinaryNode<T>* right; 
    BinaryNode<T>* parent; 
public: 
    BinaryNode(){} 
    ~BinaryNode(){} 

    T const& getKey() const { return key; } 
    const BinaryNode<T>* getLeft() const { return left; } 
    const BinaryNode<T>* getRight() const { return right; } 
    const BinaryNode<T>* getParent() const { return parent; } 
}; 

現在BinarySearchTree<T>可以通過樹遍歷做搜索,而無需成員直接訪問或能夠對其進行修改。

當然,你可能會想一些方法太修改值(設定功能)