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

Lowest Common Ancestor of a BST

لديك شجرة بحث ثنائية مخزنة في المصفوفة tree بترتيب المستويات، وقيمتان p وq تظهران فيها كلتاهما. يقع الجذر عند الفهرس 0، ويقع ابنا العقدة عند الفهرس i عند 2*i+1 (الأيسر) و2*i+2 (الأيمن)، وتشير -1 إلى موضع فارغ، وقد تنتهي المصفوفة بإدخالات إضافية من -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 هي الابن الأيسر للعقدة 8، وتقع العقدة 15 أسفل العقدة 12 وعلى يمين العقدة 8. عند الصعود من كل منهما، تكون أول عقدة يصلان إليها معًا هي 8، لذا فهذه هي الإجابة؛ والعقدة الجذر 20 هي أيضًا سلف مشترك، لكنها أعلى منهما.

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

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