Menu
CoddyTech

Vertical Order Traversal of a Binary Tree

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

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

פונקציה

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

אילוצים

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

דוגמאות

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

שאלת המשך

כל ערך הוא לכל היותר 5000. האם תוכל להשתמש בכך כדי לוותר על המיון באמצעות השוואות ולסיים בזמן O(n + 5000)?

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

בדיקה #1

בדיקה #2

בדיקה #3

ארגומנט

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

הפלט הצפוי

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