Menu
CoddyTech

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