带有函数指针的C ++递归遍历

时间:2008-10-16 03:10:52

标签: c++ binary-tree traversal

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);
 }

好的我正在尝试通过递归创建此遍历。我实际上之前发布过这个问题,但由于我不得不使用函数指针,我错了。我不明白我想做什么。我有一个调用私有的公共包装器......但是公共的一个是传递函数的那个​​,所以我甚至用它做什么?我觉得迟钝,所以即使有人给我一个小小的暗示,我相信我会得到它。我只是不知道从哪里开始。

调用它的代码示例如下:

first.inOrder(print_val)

1 个答案:

答案 0 :(得分: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);
 }