2016-02-13 195 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++约定。