Menu
CoddyTech
flag Ar iconالعربيةdown icon

Range Sum of BST

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

اكتب دالة باسم rangeSumBST تُعيد مجموع قيم جميع العقد v التي تحقق low ≤ v ≤ high، أو 0 عندما لا توجد قيمة ضمن هذا النطاق.

الدالة

rangeSumBST(tree: integer-array, low: integer, high: integer) → integer
treeinteger-array
الشجرة الثنائية للبحث بترتيب المستويات، مع استخدام ‎-1‎ للدلالة على موضع فارغ
lowinteger
أصغر قيمة للعدّ
highinteger
أكبر قيمة للعدّ
تُرجعinteger
مجموع قيم العُقد بين low وhigh، شاملًا كليهما

القيود

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

أمثلة

المدخلات
tree = [20, 8, 31, 3, 12, -1, 40, -1, -1, 10, 15]low = 9high = 31
المخرجات
88
الشرح
القيم من 9 إلى 31 هي 10 و12 و15 و20 و31، ومجموعها 88. أما 3 و8 و40 فتقع خارج النطاق.

lock icon+14 اختبارات مخفية عند الإرسال

challenge icon

سؤال إضافي

إذا كان عليك الإجابة عن آلاف الاستعلامات المختلفة (low, high) على الشجرة نفسها، فكيف يمكنك الإجابة عن كل واحد منها في زمن O(log n)؟

إعادة ضبط الشيفرة
def rangeSumBST(tree, low, high):
    # اكتب الشيفرة هنا
حالات الاختبار

الحالة 1

الحالة 2

الحالة 3

المدخلات

tree = [20, 8, 31, 3, 12, -1, 40, -1, -1, 10, 15]
low = 9
high = 31

المتوقع

88