سؤال

لقد صنعت Bsts من قبل. هل يمكنني استخدام هذا لإجراء BST دون تعديلات؟

template <class Item>
class binary_tree_node
{
  public:

  private:
    Item data_field;
    binary_tree_node *left_ptr;
    binary_tree_node *right_ptr;
};

حاولت صنع BST مع هذا ولكن ركض في بعض المشاكل. لشيء واحد، عندما أقوم بإنشاء عقدة الجذر، لا يمكنني الوصول إلى المؤشرات إلى العقد في الطفل.

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

المحلول

دون تعديلات، لا.

لكن هذا الخط "وضع وظائف الأعضاء العامة هنا" يصرخ أنه يجب أن تعدله.

نظرا لأنك تتحدث عن مشكلة الإذن، فهذا يعني أنك تحاول استخدام وظائف مجانية. ولكن بما أن المؤشرات خاصة، فلن تتمكن من الوصول إليها.

ما يجب أن تفعله هو إنشاء وظائف الأعضاء. علي سبيل المثال:

class binary_tree_node
{
  public:
    binary_tree_node()
    {
    }

    bool is_item_in_tree(const Item &item)
    {
    }

    ...
};

على أي حال، أوصي بمراجعة أساسيات C ++ حول الرؤية و OOP.

نصائح أخرى

لا، لن تكون قادرا على جعل BST مع فئة تقول "وضع وظائف الأعضاء العامة هنا".

لن تترجم حتى دون بعض TypeDef و لوحات وحدات الماكرو الجميلة.

عادة، يجب عليك توفير واجهة المقارنات الجديدة Item Class، Becuase في إدراج وإزالة Opeartion، هناك حاجة للمقارنة.

لم يتم إعطاء معلومات الخرسانة، لذلك أنا لا أعرف ما إذا كنت تستخدم < و > مشغلي العلاقات وما لا. ولكن إذا كنت تستخدمها. يجب عليك التأكد من الجديد Item فئة دعم هؤلاء المشغلين.

أود أن أنصحك لإضافة اسم فئة مقارن عام واحد Comp لتوفير واجهة المشاركة ل Item صف دراسي.

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