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