Menu
CoddyTech

Kth Smallest Element in a BST

تحصل على شجرة بحث ثنائية على شكل المصفوفة root بترتيب الكومة: الجذر عند الفهرس 0، وأبناء الفهرس i عند 2*i+1 (الأيسر) و2*i+2 (الأيمن)، وتشير -1 إلى موضع فارغ. قد تنتهي المصفوفة بإدخالات -1 إضافية. عند كل عقدة، تحتوي الشجرة الفرعية اليسرى على قيم أصغر فقط، والشجرة الفرعية اليمنى على قيم أكبر فقط.

أعِد القيمة الأصغر رقم k في الشجرة، مع بدء العد من 1.

الدالة

kthSmallest(root: integer-array, k: integer) → integer
rootinteger-array
شجرة البحث الثنائية بترتيب المستويات، مع استخدام ‎-1‎ للمواقع الفارغة
kinteger
الموضع المطلوب إيجاده بالترتيب التصاعدي، بدءًا من 1
تُرجعinteger
القيمة الأصغر ذات الترتيب k في الشجرة

القيود

  • 1 ≤ root.length ≤ 32767
  • كل قيمة من root[i] إما -1 أو قيمة تحقق 0 ≤ root[i] ≤ 105.
  • root[0] لا تكون أبدًا -1، لذا تحتوي الشجرة على عقدة واحدة على الأقل.
  • قد تنتهي المصفوفة بعناصر -1 إضافية بعد العقدة الأخيرة.
  • كلا الابنين في الموضع الفارغ فارغان أيضًا، والعمق لا يتجاوز 14.
  • تنطبق قاعدة الترتيب عند كل عقدة، لذا لا تظهر أي قيمة مرتين.
  • 1 ≤ k ≤ عدد العقد في الشجرة.

أمثلة

المدخلات
root = [41, 17, 65, 6, 29, -1, 90, -1, -1, 22]k = 4
المخرجات
29
الشرح
بترتيب تصاعدي، القيم هي 6, 17, 22, 29, 41, 65, 90، والقيمة الرابعة هي 29. وهي الأكبر من بين القيم الأربع في الشجرة الفرعية اليسرى للجذر.
challenge icon

سؤال إضافي

إذا كانت الشجرة تتغير كثيرًا وطُلب منك إيجاد القيمة الـk الأصغر مرات عديدة، فما الذي يمكن أن تخزّنه كل عقدة بحيث يستغرق كل استعلام O(h)؟

إعادة ضبط الشيفرة
def kthSmallest(root, k):
    # اكتب الكود هنا

اختبار #1

اختبار #2

الوسائط

root = [41, 17, 65, 6, 29, -1, 90, -1, -1, 22]
k = 4

الإخراج المتوقع

29