هل يمكنني إجراء شجرة بحث ثنائية مع هذا؟
-
19-09-2019 - |
سؤال
لقد صنعت 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
صف دراسي.