Menu
CoddyTech

Subtree of Another Tree

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

החזר true אם לצומת כלשהו ב-root, יחד עם כל צאצאיו, יש בדיוק אותה צורה ואותם ערכים כמו ל-subRoot, ו-false אחרת. גם העץ כולו root נחשב.

פונקציה

isSubtree(root: integer-array, subRoot: integer-array) → boolean
rootinteger-array
העץ לחיפוש, בסדר רמות, כאשר ‎-1 מציין מקום ריק
subRootinteger-array
העץ שיש לחפש, באותו פורמט
מחזירהboolean
true אם subRoot מופיע ב-root כצומת עם כל הצאצאים שלו, false אחרת

אילוצים

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

דוגמאות

קלט
root = [6, 2, 8, 1, 3, -1, 9]subRoot = [2, 1, 3]
פלט
true
הסבר
לצומת 2 באינדקס 1 יש ילדים 1 ו־3, ושניהם עלים. זה בדיוק subRoot.
challenge icon

שאלת המשך

האם אפשר ליצור טביעת אצבע לכל תת־עץ על סמך הערך שלו וטביעות האצבע של ילדיו, כך שהשוואה מול subRoot תעלה O(1)? מה עושים כשיש התנגשות בין טביעות האצבע של שני תתי־עצים שונים?

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

בדיקה #1

בדיקה #2

בדיקה #3

ארגומנטים

root = [6, 2, 8, 1, 3, -1, 9]
subRoot = [2, 1, 3]

הפלט הצפוי

true