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