Domanda

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

Ok, sto provando a creare questo Traversal tramite ricorsione. In realtà ho già pubblicato questo problema prima, ma stavo risolvendo il problema a causa della necessità di utilizzare un puntatore a funzione. Non capisco cosa dovrei fare. Ho il wrapper pubblico che chiama quello privato ... ma quello pubblico è quello con la funzione che viene passata, quindi cosa devo fare? Mi sento ritardato, quindi anche se qualcuno mi desse un piccolo suggerimento, sono sicuro che ce l'avrei fatta. Semplicemente non so dove andare da qui.

un esempio di un codice che lo chiama è questo:

first.inOrder(print_val)
È stato utile?

Soluzione

Ecco come farlo correttamente, ma Node :: GetItem deve essere implementato per essere corretto al 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);
 }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top