带函数指针的C++递归遍历
这是正确执行的方法,但Node::GetItem需要实现才能100%正确:带函数指针的C++递归遍历,c++,binary-tree,traversal,C++,Binary Tree,Traversal,这是正确执行的方法,但Node::GetItem需要实现才能100%正确: first.inOrder(print_val) 这是正确执行的方法,但Node::GetItem需要实现才能100%正确: first.inOrder(print_val) 等等,为什么我需要T&?有人告诉我,我只需要一个公共包装器和一个私有递归函数。所以我不确定GetNodeType应该做什么,我认为在作业的范围内不需要。它现在真的起作用了。我必须用其他函数修复一些其他东西。。。但这实际上效果很好。非常感谢。假设
first.inOrder(print_val)
这是正确执行的方法,但Node::GetItem需要实现才能100%正确:
first.inOrder(print_val)
等等,为什么我需要T&?有人告诉我,我只需要一个公共包装器和一个私有递归函数。所以我不确定GetNodeType应该做什么,我认为在作业的范围内不需要。它现在真的起作用了。我必须用其他函数修复一些其他东西。。。但这实际上效果很好。非常感谢。假设Node看起来像模板类Node{T item_;};然后GetNodeType的主体将是return节点->item@道格-是的,亚当是对的。由于您有一个节点指针,但传入的函数需要一个T&,因此需要提供从节点获取T的代码。它很可能和Adam的代码片段一样简单?有人告诉我,我只需要一个公共包装器和一个私有递归函数。所以我不确定GetNodeType应该做什么,我认为在作业的范围内不需要。它现在真的起作用了。我必须用其他函数修复一些其他东西。。。但这实际上效果很好。非常感谢。假设Node看起来像模板类Node{T item_;};然后GetNodeType的主体将是return节点->item@道格-是的,亚当是对的。由于您有一个节点指针,但传入的函数需要一个T&,因此需要提供从节点获取T的代码。它很可能和Adam的代码片段一样简单。
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);
}