Menu
CoddyTech

Lowest Common Ancestor of a BST

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

اكتب lowestCommonAncestor، التي تُعيد قيمة أقرب سلف مشترك للقيمتين p وq، وكلتاهما موجودتان في الشجرة: أعمق عقدة تضمّهما كلتيهما في شجرتها الفرعية. تكون العقدة جزءًا من شجرتها الفرعية، لذا إذا كانت p أعلى من q، فالإجابة هي p.

الدالة

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

القيود

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

أمثلة

المدخلات
tree = [20, 8, 31, 3, 12, 25, 40, -1, -1, 10, 15]p = 3q = 15
المخرجات
8
الشرح
عند الصعود من 3 ومن 15، تكون أول عقدة يصلان إليها هي 8: 3 هو ابنها الأيسر، و15 يقع أسفل 12 في جهتها اليمنى. الجذر 20 سلف مشترك أيضًا، لكنه أعلى.
challenge icon

سؤال إضافي

ما الذي ستغيّره إذا كان من المحتمل ألا تكون p أو q موجودة في الشجرة، وكان على الدالة أن تُرجع -1 في هذه الحالة؟

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

اختبار #1

اختبار #2

اختبار #3

الوسائط

tree = [20, 8, 31, 3, 12, 25, 40, -1, -1, 10, 15]
p = 3
q = 15

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

8