Menu
CoddyTech

Kth Smallest Element in a BST

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

יש להחזיר את הערך הקטן ה-k ביותר בעץ, בספירה החל מ-1.

פונקציה

kthSmallest(root: integer-array, k: integer) → integer
rootinteger-array
עץ החיפוש הבינארי לפי סדר הרמות, כאשר ‎-1 מציין מקום ריק
kinteger
המיקום שיש למצוא בסדר עולה, החל מ־1
מחזירהinteger
הערך ה־k הקטן ביותר בעץ

אילוצים

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

דוגמאות

קלט
root = [41, 17, 65, 6, 29, -1, 90, -1, -1, 22]k = 4
פלט
29
הסבר
הערכים בסדר עולה הם 6, 17, 22, 29, 41, 65, 90, והערך הרביעי הוא 29. זהו הגדול ביותר מבין ארבעת הערכים בתת־העץ השמאלי של השורש.
challenge icon

שאלת המשך

אם העץ משתנה לעיתים קרובות ואתה מתבקש למצוא את הערך הקטן ה־k פעמים רבות, מה כל צומת יכול לשמור כדי שכל שאילתה תיקח O(h)?

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

בדיקה #1

בדיקה #2

ארגומנטים

root = [41, 17, 65, 6, 29, -1, 90, -1, -1, 22]
k = 4

הפלט הצפוי

29