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

好的,我正在尝试通过递归创建此遍历。我实际上之前发布了这个问题,但由于我必须使用函数指针,所以我做错了。我不明白我应该做什么。我有调用私有包装的公共包装器......但是公共包装器是带有传入函数的包装器,所以我该怎么办?我觉得自己很迟钝,所以即使有人给我一个小小的暗示,我也相信我会明白的。我只是不知道从这里去哪里。

调用它的代码示例如下:

first.inOrder(print_val)
4

1 回答 1

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);
 }
于 2008-10-16T03:17:51.403 回答