2008-10-16 2 views
1
template <class T> 
void BT<T>::inOrder(void (*inOrderPtr)(T&)) 
{ 
    inOrderPtr(inOrder(this->root)); 
} 
template <class T> 
void BT<T>::inOrder(Node<T>* root) const 
{ 
    if (root->left != NULL) 
     inOrder(root->left); 
     //something here 
    if (root->right != NULL) 
     inOrder(root->right); 
} 

Хорошо, я пытаюсь создать этот обход через рекурсию. Я действительно опубликовал эту проблему раньше, но я ошибся, потому что мне пришлось использовать указатель на функцию. Я не понимаю, что я должен делать. У меня есть общедоступная оболочка, которая вызывает частную ... но общественная - это та, у которой передается функция, и что мне с ней делать? Я чувствую отсталость, поэтому, даже если кто-то даст мне небольшой намек, я уверен, что получу его. Я просто не знаю, куда идти отсюда.C++ рекурсивные обходы с указателями функций

пример кода, который обращается к нему так:

first.inOrder(print_val) 

ответ

4

Это, как сделать это правильно, но Node :: GetItem нуждается в реализации того, чтобы это было 100% правильно:

template <class T> 
T& Node<T>::GetItem() const 
{ 
    // TODO - implement getting a T& from a Node<T> 
    return m_item; // possible implementation depending on Node's definition 
} 

template <class T> 
void BT<T>::inOrder(void (*inOrderPtr)(T&)) 
{ 
    inOrder(this->root, inOrderPtr); 
} 

template <class T> 
void BT<T>::inOrder(Node<T>* root, void (*inOrderPtr)(T&)) const 
{ 
    if (root->left != NULL) 
     inOrder(root->left, inOrderPtr); 

    inOrderPtr(root->GetItem()); 

    if (root->right != NULL) 
     inOrder(root->right, inOrderPtr); 
} 
+0

Подождите, почему мне нужно получить T &? Мне сказали, что для этого мне понадобится только Public Wrapper и частная рекурсивная функция. Поэтому я не совсем уверен, что должен делать GetNodeType. – Doug 2008-10-16 03:34:35

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