2016-02-13 6 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

Возможный дубликат [Перемещение по порядку с рекурсией?] (Http://stackoverflow.com/questions/20034335/inorder-traversal-with-recursion) –

+0

Его функция передает корень в качестве параметра. Я пытаюсь выяснить функцию, которая не принимает параметр – jcsantos

ответ

0

Просто пусть функция printInOrder вызвать вспомогательную функцию, которая имеет указатель узла аргумент.

Чтобы ограничить объем вспомогательной функции, это может быть, например,

  • частный static член BST класса или

  • область применения пространства имен свободная функция в пространстве имен impl или detail или такое (соглашение для частных деталей реализации), или даже

  • статическая функция внутри класса внутри функции printInOrder.

Конечно, вместо реализации функциональности с помощью рекурсии вы можете просто сохранить явный стек и использовать итеративное решение, в этом случае вам не нужен вспомогательная функция.

Общий совет: вы можете избежать неприятных случайных замещений текста, а также избегать впечатления от крика, резервируя все имена в верхнем регистре для макросов. Это обычное соглашение C++.

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