Menu
CoddyTech

Validate Binary Search Tree

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

اكتب isValidBST، التي تُرجع true إذا كانت الشجرة شجرة بحث ثنائية، وfalse خلاف ذلك. في شجرة البحث الثنائية، تكون قيمة كل عقدة أكبر تمامًا من كل قيمة في شجرتها الفرعية اليسرى، وأصغر تمامًا من كل قيمة في شجرتها الفرعية اليمنى.

الدالة

isValidBST(tree: integer-array) → boolean
treeinteger-array
الشجرة الثنائية بترتيب المستويات، مع استخدام ‎-1‎ للدلالة على موضع فارغ
تُرجعboolean
صحيح إذا كانت الشجرة شجرة بحث ثنائية، وخطأ خلاف ذلك

القيود

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

أمثلة

المدخلات
tree = [8, 3, 12, 1, 6, 10, 15]
المخرجات
true
الشرح
عند القراءة بالترتيب (الشجرة الفرعية اليسرى، العقدة، الشجرة الفرعية اليمنى)، تكون القيم 1, 3, 6, 8, 10, 12, 15. وهي تزداد بصرامة، لذا تقع كل عقدة على الجانب الصحيح من كل سلف.
challenge icon

سؤال إضافي

يقع والد العقدة عند الفهرس (i-1)/2، بعد التقريب إلى أسفل. هل يمكنك اجتياز الشجرة بالترتيب باستخدام مساحة إضافية O(1)، والتنقل عبر الآباء بدلًا من استخدام مكدس أو الاستدعاء الذاتي؟

إعادة ضبط الشيفرة
def isValidBST(tree):
    # اكتب الشيفرة هنا

اختبار #1

اختبار #2

اختبار #3

وسيط

tree = [8, 3, 12, 1, 6, 10, 15]

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

true