Menu
CoddyTech

Top View of Binary Tree

מקבלים עץ בינארי המאוחסן במערך root לפי סדר ערימה: השורש באינדקס 0, הילדים של אינדקס i באינדקסים 2*i+1 (משמאל) ו־2*i+2 (מימין), ו־-1 מציין מקום ריק.

השורש נמצא בעמודה 0; ילד שמאלי נמצא עמודה אחת משמאל להורה שלו, וילד ימני נמצא עמודה אחת מימין. במבט מלמעלה רואים את הצומת הרדוד ביותר בכל עמודה; במקרה של תיקו, רואים את הצומת שמופיע ראשון ברמתו, משמאל לימין (האינדקס הקטן יותר). החזירו את הערכים שרואים, מהעמודה השמאלית ביותר לימנית ביותר.

פונקציה

topView(root: integer-array) → integer-array
rootinteger-array
העץ בסדר ערימה, עם ‎-1‎ במקום ריק
מחזירהinteger-array
הערך שנראה מלמעלה בכל עמודה, מהעמודה השמאלית ביותר תחילה

אילוצים

  • 1 ≤ root.length ≤ 32767
  • כל root[i] הוא -1 או ערך שעבורו 0 ≤ root[i] ≤ 104, ואף ערך אינו מופיע פעמיים.
  • root[0] לעולם אינו -1, ולכן יש בעץ לפחות צומת אחד.
  • המערך עשוי להסתיים בערכי -1 נוספים אחרי הצומת האחרון.
  • גם שני הילדים של מקום ריק ריקים, ובעץ יש לכל היותר 14 רמות.

דוגמאות

קלט
root = [5, 2, 9, 4, 7, 1, 6]
פלט
[4, 2, 5, 9, 6]
הסבר
העמודות מכילות, משמאל לימין, את 4 (עמודה ‎-2), את 2 (‎-1), את השורש 5 (0), את 9 (1) ואת 6 (2). גם 7 ו־1 נמצאים בעמודה 0, אבל השורש נמצא מעליהם.
challenge icon

שאלת המשך

כשמשתמשים באובייקטים של צמתים במקום במערך, אין אינדקס שמכריע בשוויון. איך תנסח את כלל השוויון, והאם הקוד שלך לסריקה לרוחב משתנה?

איפוס הקוד
def topView(root):
    # כתבו כאן את הקוד

בדיקה #1

בדיקה #2

בדיקה #3

ארגומנט

root = [5, 2, 9, 4, 7, 1, 6]

הפלט הצפוי

[4, 2, 5, 9, 6]