Menu
CoddyTech

Range Sum of BST

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

أعِد مجموع قيم جميع العقد 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 فتقع خارج النطاق.
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