Menu
CoddyTech

Boundary Traversal of Binary Tree

בינוניסריקת עציםpython iconjava iconcpp iconc iconjs icon+10

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

יש להחזיר את הגבול נגד כיוון השעון, החל מהשורש:

  1. השורש.
  2. הגבול השמאלי, מלמעלה למטה: החל מהילד השמאלי של השורש, עוברים לילד השמאלי אם יש כזה, אחרת לילד הימני. עוצרים לפני עלה.
  3. כל העלים, משמאל לימין.
  4. הגבול הימני, מלמטה למעלה: תמונת הראי של הגבול השמאלי, החל מהילד הימני של השורש.

אף צומת אינו מופיע פעמיים, ולכן עץ עם צומת אחד מחזיר רק את השורש שלו.

פונקציה

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

אילוצים

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

דוגמאות

קלט
root = [7, 3, 9, 1, 5, 8, -1, -1, -1, 4, 6]
פלט
[7, 3, 1, 4, 6, 8, 9]
הסבר
אחרי השורש 7, הגבול השמאלי הוא 3: הילד שלו, 1, הוא עלה. העלים הם 1, 4, 6, 8. הגבול הימני הוא 9, מעל העלה 8.
challenge icon

שאלת המשך

איך היית מונה את הגבול בכיוון השעון: השורש, הקצה הימני מלמעלה למטה, העלים מימין לשמאל, ואז הקצה השמאלי מלמטה למעלה?

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

בדיקה #1

בדיקה #2

בדיקה #3

ארגומנט

root = [7, 3, 9, 1, 5, 8, -1, -1, -1, 4, 6]

הפלט הצפוי

[7, 3, 1, 4, 6, 8, 9]