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

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، بترتيب متزايد تمامًا، وهذا ما توفره شجرة البحث.

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

challenge icon

سؤال إضافي

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

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

الحالة 1

الحالة 2

الحالة 3

المدخلات

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

المتوقع

true