Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带函数指针的C++递归遍历_C++_Binary Tree_Traversal - Fatal编程技术网

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

带函数指针的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应该做什么,我认为在作业的范围内不需要。它现在真的起作用了。我必须用其他函数修复一些其他东西。。。但这实际上效果很好。非常感谢。假设

这是正确执行的方法,但Node::GetItem需要实现才能100%正确:

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