Frage

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 Ich versuche, diese Traversal über Rekursion zu erstellen. Ich stellte tatsächlich dieses Problem vor, aber ich würde darüber falsch wegen mir mit einem Funktionszeiger verwenden. Ich verstehe nicht, was ich vermute, zu tun. Ich habe den öffentlichen Wrapper bekam, die auf dem privaten nennt man ... aber die Öffentlichkeit ist die, mit der Funktion in so übergeben wird, was ich mit ihm selbst tun ?? Ich fühle mich so zurückgeblieben, auch wenn mir jemand einen kleinen Hinweis geben würde ich bin sicher, dass ich es bekommen würde. Ich weiß nur nicht, wo man von hier geht.

ein Beispiel für einen Code, der auf es nennt, ist dies:

first.inOrder(print_val)
War es hilfreich?

Lösung

Dies ist, wie es richtig zu machen, aber Knoten :: GetItem muss für diese, um die Umsetzung zu 100% korrekt sein:

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);
 }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top