شبكة من أشجار البحث الثنائية مع الوراثة وتعدد الأشكال
Python
Hard
classes
مهمة «شبكة من أشجار البحث الثنائية مع الوراثة وتعدد الأشكال»
نفّذ صنف `Node` لعقدة شجرة بحث ثنائية (BST) مع دوال `insert` و `search` و `delete`. أنشئ صنف `BST` الذي يخزن الجذر ويحتوي على الدوال `insert` (إضافة قيمة)، `search` (البحث عن قيمة، يُرجع `True`/`False`)، `delete` (إزالة قيمة)، و `get_height` (ارتفاع الشجرة). ثم أنشئ صنف `AVLTree` يرث من `BST`، ويعيد تعريف `insert` و `delete` لدعم التوازن (مع التدويرات). بيانات الإدخال: سلسلة من الأوامر. الأوامر: `"insert x"` — أضف x، `"delete x"` — أزل x (إذا كان موجودًا)، `"search x"` — أخرج `"found"` أو `"not found"`، `"height"` — أخرج ارتفاع الشجرة. بالنسبة لـ `AVLTree`، بعد كل إضافة/إزالة، يتم التحقق من التوازن (فرق ارتفاعات الأشجار الفرعية <= 1) ويتم تنفيذ التدوير المناسب. القيود: -10^9 <= x <= 10^9، عدد الأوامر يصل إلى 10^5.
تنسيق الإدخال
السطر الأول: عدد صحيح واحد n (1 <= n <= 10^5) — عدد الأوامر. ثم n سطرًا، كل سطر يحتوي على أمر: insert x, delete x, search x, أو height.
تنسيق الإخراج
لكل أمر `search`، أخرج "found" أو "not found" في سطر منفصل. بالنسبة لأمر `height`، أخرج عددًا صحيحًا واحدًا — ارتفاع الشجرة (ارتفاع الشجرة الفارغة = 0).
أمثلة
مثال 1
الإدخال
3
1 2 -3 4
-1 -2
5 0 3
الإخراج
مثال 2
الإدخال
2
0 0 0
2 -2 2 -2
الإخراج
main.py