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