Menu
CoddyTech

Lowest Common Ancestor of a Binary Tree

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

أعِد قيمة أدنى سلف مشترك للعقدتين p وq، وهما قيمتان لعقدتين مختلفتين: أعمق عقدة تحتوي شجرتها الفرعية على كلتيهما. تشمل الشجرة الفرعية عقدتها العليا، لذا إذا كانت q تقع أسفل p، فالإجابة هي p.

الدالة

lowestCommonAncestor(root: integer-array, p: integer, q: integer) → integer
rootinteger-array
الشجرة الثنائية بترتيب المستويات، مع استخدام -1 للدلالة على موضع فارغ
pinteger
قيمة عقدة واحدة
qinteger
قيمة عقدة أخرى
تُرجعinteger
قيمة أدنى عقدة تحتوي شجرتها الفرعية على كلٍّ من p وq

القيود

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

أمثلة

المدخلات
root = [8, 3, 10, 6, 4, 12, 1, -1, -1, 7, 9]p = 6q = 9
المخرجات
3
الشرح
6 هو الابن الأيسر لـ 3، وتقع 9 أسفل 4 إلى يمين 3، لذا يلتقيان عند 3. ستشير مقارنة القيم إلى الجذر 8: 6 أصغر و9 أكبر.
challenge icon

سؤال إضافي

إذا كان من الممكن غياب p أو q، وكانت الإجابة -1، فأي اختصار في المرور الواحد يفشل، وكيف يمكنك مع ذلك إنهاء المهمة في اجتياز واحد؟

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

اختبار #1

اختبار #2

اختبار #3

الوسائط

root = [8, 3, 10, 6, 4, 12, 1, -1, -1, 7, 9]
p = 6
q = 9

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

3