تحتاج إلى الوصول إلى كائن الفئة عن طريق مؤشر وظيفة - ثنائي البحث شجرة الفئة الخلق ذات

StackOverflow https://stackoverflow.com/questions/206498

سؤال

وإنشاء Traversals لثنائي شجرة البحث مع العودية.

void inOrder(void (*inOrderPtr)(T&)) 
{ 
    if(this->left != NULL) 
        inOrder((*inOrderPtr)(this->left)); 
    inOrderPtr(this->data); 
    if(this->right != NULL) 
        inOrder((*inOrderPtr)(this->right)); 
} 

وهنا هي وظيفة. الآن هذا خطأ واضح. وتسمى هذه الوظيفة مثل هذا:

first.inOrder(print_vals);

والأول هو كائن، وفال الطباعة مجرد وظيفة التي تقوم بطباعة ما هي البيانات في الكائن. هناك ثلاث قيم لكل كائن، والبيانات، اليسار، واليمين. كيف يمكنني فعلا الوصول إلى تلك العناصر مع وظيفة؟

هل كانت مفيدة؟

المحلول

ويبدو أن الدعوة إلى inOrderPtr(this->data) يمر مجرد عضو data من عقدة الشجرة إلى وظيفة print_vals. إذا كنت ترغب في الوصول إلى العناصر left وright، استخدم inOrderPtr(*this). سيكون لديك لتغيير الإعلانات المختلفة من أجل هذا لتجميع مثل الإعلانات عن inOrderPtr وprint_vals. دون رؤية ما تبقى من التعليمات البرمجية فإنه من الصعب القول ما تحتاج لتغييرها ل.

وعلى صعيد آخر، يبدو لي أنك قد ترغب في إرسال دعوات متكررة أكثر من هذا القبيل:

this->left->inOrder(inOrderPtr);

وأنا على صنع افتراضات حول التطبيق الخاص بك، وإن كان.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top