Menu
CoddyTech

Balanced Binary Tree

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

أعِد true إذا كانت الشجرة متوازنة الارتفاع، أي إذا كان الفرق بين ارتفاعَي الشجرتين الفرعيتين اليسرى واليمنى عند كل عقدة لا يتجاوز 1، وإلا فأعِد false. ارتفاع الشجرة الفرعية هو عدد العقد في أطول مسار نزولي فيها؛ وارتفاع الشجرة الفرعية الفارغة هو 0.

الدالة

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

القيود

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

أمثلة

المدخلات
root = [5, 2, 9, -1, -1, 7, 11]
المخرجات
true
الشرح
الشجرة الفرعية اليسرى للجذر هي العقدة الوحيدة 2، وارتفاعها 1. أما شجرته الفرعية اليمنى 9 و7 و11 فارتفاعها 2. والفرق بينهما 1، ولكل عقدة أخرى شجرتان فرعيتان متساويتان في الارتفاع.
challenge icon

سؤال إضافي

هل يمكنك فحص الشجرة دون استخدام الاستدعاء الذاتي، باستخدام مكدس صريح؟

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

اختبار #1

اختبار #2

اختبار #3

وسيط

root = [5, 2, 9, -1, -1, 7, 11]

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

true