2016-02-13 250 views
-4

在我的BST模板類中,有一個不帶參數的PrintInOrder()函數。二叉搜索樹 - PrintInOrder();

void BST<Type>::printInOrder() const{} 

我看到了一些功能,他們都採取了Node*根作爲參數,這是有道理的。

如何使用引用的函數來進行遞歸打印所有的值?

代碼:

/* I don't know if it's gonna help, but this is my class */ 

struct Node 
{ 
    Type m_data; 
    Node *m_left, *m_right; 

    Node(const Type& _data) : m_data(_data), m_left(nullptr), m_right(nullptr) {} 
}; 

Node* m_root; 
int m_size; 

public: 
    BST(); 
    ~BST(); 
    BST& operator=(const BST& that); 
    BST(const BST& that);; 
    void insert(const Type& v); 
    bool findAndRemove(const Type& v); 
    bool find(const Type& v) const; 
    void clear(); 
    void printInOrder() const; 
}; 
+0

可能重複[Inorder Traversal with Recursion?](http://stackoverflow.com/questions/20034335/inorder-traversal-with-recursion) –

+0

他的函數傳遞一個根作爲參數。我試圖找出一個不帶參數的函數 – jcsantos

回答

0

只是讓printInOrder函數調用,有一個節點指針參數的輔助功能。

爲了限制輔助功能的範圍,它可以是例如

  • BST類的私有static構件,或

  • 在稱爲impldetail或例如(約定私有實現份)命名空間的命名空間範圍自由功能,甚至

  • printInOrder函數內部的類中的靜態函數。

當然,而不是用遞歸實現的功能你可以保持一個明確的堆棧,使用迭代的解決方案,在這種情況下,你並不需要一個輔助函數。

一般建議:您可以通過爲宏保留所有大寫名稱來避免麻煩的無意文本替換,以及避免給出呼喊的印象。這是一個常見的C++約定。