문제

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)
도움이 되었습니까?

해결책

이것은 올바르게 수행하는 방법이지만 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);
 }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top