Menu
CoddyTech

Construct Binary Tree from Preorder and Inorder Traversal

מקבלים שני מערכים, preorder ו־inorder, שמציגים את הערכים הייחודיים של אותו עץ בינארי. בסריקה תחילית מבקרים בצומת, אחר כך בתת־העץ השמאלי שלו, ואז בתת־העץ הימני שלו. בסריקה תוכית מבקרים בתת־העץ השמאלי, אחר כך בצומת, ואז בתת־העץ הימני.

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

פונקציה

buildTree(preorder: integer-array, inorder: integer-array) → integer-array
preorderinteger-array
הערכים בסדר קדם־סדר: צומת, תת־עץ שמאלי, תת־עץ ימני
inorderinteger-array
הערכים לפי סדר inorder: תת-העץ השמאלי, הצומת, תת-העץ הימני
מחזירהinteger-array
העץ לפי סדר הרמות, עם ‎-1‎ עבור מקומות ריקים וללא ‎-1‎ בסוף

אילוצים

  • 1 ≤ preorder.length ≤ 3000
  • inorder.length == preorder.length
  • 0 ≤ preorder[i] ≤ 104, וכל הערכים שונים זה מזה.
  • inorder מכיל את אותם הערכים, ושני המערכים מתארים את אותו עץ בינארי.
  • עומק העץ הוא לכל היותר 14, לכן כל אינדקס בתשובה קטן מ־214-1 = 16383.

דוגמאות

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

שאלת המשך

האם תוכלו לבנות מחדש את העץ ללא רקורסיה, במעבר אחד על preorder באמצעות מחסנית מפורשת?

איפוס הקוד
def buildTree(preorder, inorder):
    # כתבו כאן קוד

בדיקה #1

בדיקה #2

ארגומנטים

preorder = [7, 3, 0, 9, 4, 6]
inorder = [0, 3, 9, 7, 4, 6]

הפלט הצפוי

[7, 3, 4, 0, 9, -1, 6]