Menu
CoddyTech

Subtree of Another Tree

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

أعِد true إذا كان لبعض عقد root، مع جميع أحفادها، الشكل والقيم نفسيهما تمامًا كما في subRoot، وأعِد false خلاف ذلك. ويُحتسب root بأكملها أيضًا.

الدالة

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

القيود

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

أمثلة

المدخلات
root = [6, 2, 8, 1, 3, -1, 9]subRoot = [2, 1, 3]
المخرجات
true
الشرح
العقدة 2 عند الفهرس 1 لها الابنان 1 و3، وكلاهما ورقتان. وهذا هو بالضبط subRoot.
challenge icon

سؤال إضافي

هل يمكنك إنشاء بصمة لكل شجرة فرعية اعتمادًا على قيمتها وبصمتي الشجرتين الفرعيتين التابعتين لها، بحيث لا تستغرق مقارنتها مع subRoot سوى O(1)؟ ماذا تفعل عندما تتصادم بصمتا شجرتين فرعيتين مختلفتين؟

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

اختبار #1

اختبار #2

اختبار #3

الوسائط

root = [6, 2, 8, 1, 3, -1, 9]
subRoot = [2, 1, 3]

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

true