Leetcode Top Interview โœจ
GithubLinkedinXOfficial Website
  • Leetcode Top Interview ๐ŸŽฏ
  • Guide to Calculating Algorithm Complexity ๐Ÿš€
  • Topic 1 Array - String
    • 88. Merge Sorted Arrays ๐Ÿงฉ
    • 27. Remove Element ๐Ÿงน
    • 26. Remove Duplicates from Sorted Array ๐Ÿšซ
    • 80. Remove Duplicates from Sorted Array II ๐Ÿšซ๐Ÿšซ
    • 169. Majority Element ๐Ÿ‘‘
    • 189. Rotate Array ๐Ÿ”„
    • 121. Best Time to Buy and Sell Stock ๐Ÿ“ˆ
    • 122. Best Time to Buy and Sell Stock II ๐Ÿ“ˆ๐Ÿ’ฐ
    • 55. Jump Game ๐Ÿƒโ€โ™‚๏ธ
    • 45. Jump Game II ๐Ÿƒโ€โ™‚๏ธ
    • 274. H-Index ๐Ÿ“Š
    • 380. Insert Delete GetRandom O(1) ๐ŸŽฒ
    • 238. Product of Array Except Self ๐Ÿ”„
    • 134. Gas Station โ›ฝ
    • 135. Candy ๐Ÿฌ
    • 42. Trapping Rain Water ๐ŸŒง๏ธ
    • 13. Roman to Integer ๐Ÿ”ข
    • 018 Integer to Roman
    • 58. Length of Last Word ๐Ÿ” 
    • 14. Longest Common Prefix ๐ŸŒฑ
    • 151. Reverse Words in a String ๐Ÿ”„
    • 6. Zigzag Conversion ๐Ÿ”€
    • 28. Find the Index of the First Occurrence in a String ๐Ÿ”„
    • 68. Text Justification ๐Ÿ”„
  • Topic 2 Two Pointers
    • 125. Valid Palindrome ๐Ÿšฆ
    • 392. Is Subsequence ๐Ÿ“
    • 167. Two Sum II - Input Array Is Sorted ๐Ÿ”
    • 11. Container With Most Water ๐Ÿž๏ธ
    • 15. 3Sum ๐ŸŒ
  • Topic 3 Sliding Window
    • 209. Minimum Size Subarray Sum ๐ŸŒ
    • 3. Longest Substring Without Repeating Characters ๐ŸŒ
    • 30. Substring with Concatenation of All Words ๐ŸŒ
    • 76. Minimum Window Substring ๐ŸŒ
  • Topic 4 Matrix
    • 36. Valid Sudoku ๐ŸŒ
    • 54. Spiral Matrix ๐ŸŒ
    • 48. Rotate Image ๐Ÿ”„
    • 73. Set Matrix Zeroes
    • 289. Game of Life ๐Ÿ–ผ๏ธ
  • Topic 5 Hashmap
    • 383. Ransom Note ๐Ÿ”
    • 205. Isomorphic Strings ๐Ÿ”
    • 290. Word Pattern ๐Ÿงฉ
    • 242. Valid Anagram ๐ŸŽข
    • 49. Group Anagrams ๐Ÿคนโ€โ™‚๏ธ
    • 1. Two Sum ๐Ÿ”
    • 202. Happy Number ๐Ÿคฉ
    • 219. Contains Duplicate II ๐Ÿ”
    • 128. Longest Consecutive Sequence ๐Ÿ”
  • Topic 6 Intervals
    • 228. Summary Ranges ๐Ÿ“Š
    • 56. Merge Intervals ๐Ÿ”€
    • 57. Insert Interval ๐Ÿ†•
    • 452. Minimum Number of Arrows to Burst Balloons ๐ŸŽˆ
  • Topic 7 Stack
    • 20. Valid Parentheses ๐Ÿ”
    • 71. Simplify Path ๐Ÿ—บ๏ธ
    • 155. Min Stack ๐Ÿ—ƒ๏ธ
    • 150. Evaluate Reverse Polish Notation ๐Ÿง ๐Ÿ’ป
    • 224. Basic Calculator ๐Ÿงฎ
  • Topic 8 Linked List
    • 141. Linked List Cycle ๐Ÿ”
    • 2. Add Two Numbers ๐Ÿ”ข
    • 21. Merge Two Sorted Lists ๐Ÿ”—
    • 138. Copy List with Random Pointer ๐Ÿ”—
    • 92. Reverse Linked List II ๐Ÿ”„
      • Letโ€™s explain step by step ๐Ÿ‡
    • 25. Reverse Nodes in k-Group ๐Ÿ”„
    • 19. Remove Nth Node From End of List ๐Ÿ—‘๏ธ
    • 82. Remove Duplicates from Sorted List II โŒ๐Ÿ”ข
    • 61. Rotate List ๐Ÿ”„
    • 86. Partition List ๐Ÿ”—
    • 146. LRU Cache ๐Ÿ”—
  • Topic 9 Binary Tree General
    • 104. Maximum Depth of Binary Tree ๐Ÿ”—
    • 100. Same Tree ๐Ÿ”—
    • 226. Invert Binary Tree ๐Ÿ”—
    • 101. Symmetric Tree ๐Ÿ”—
    • 105. Construct Binary Tree from Preorder and Inorder Traversal ๐Ÿ”—
    • 106. Construct Binary Tree from Inorder and Postorder Traversal ๐Ÿ”—
    • 117. Populating Next Right Pointers in Each Node II ๐Ÿ”—
    • 114. Flatten Binary Tree to Linked List ๐Ÿ”—
    • 112. Path Sum ๐Ÿ”—
    • 129. Sum Root to Leaf Numbers ๐Ÿ”—
      • What_is_DFS
    • 124. Binary Tree Maximum Path Sum ๐Ÿ”—
Powered by GitBook
On this page
  • Problem Statement ๐Ÿ“œ
  • Examples ๐ŸŒŸ
  • Constraints โš™๏ธ
  • Solution ๐Ÿ’ก
  • Java Solution
  • Explanation of the Solution
  • Time Complexity โณ
  • Space Complexity ๐Ÿ’พ
  • Follow-up Challenges ๐Ÿง

Was this helpful?

  1. Topic 9 Binary Tree General

105. Construct Binary Tree from Preorder and Inorder Traversal ๐Ÿ”—

Previous101. Symmetric Tree ๐Ÿ”—Next106. Construct Binary Tree from Inorder and Postorder Traversal ๐Ÿ”—

Last updated 4 months ago

Was this helpful?

Difficulty: Medium - Tags: Binary Tree, Divide and Conquer, Recursion


Problem Statement ๐Ÿ“œ

Given two integer arrays preorder and inorder:

  • preorder represents the preorder traversal of a binary tree.

  • inorder represents the inorder traversal of the same binary tree.

Construct and return the binary tree.


Examples ๐ŸŒŸ

๐Ÿ”น Example 1:

Input:

preorder = [3,9,20,15,7]
inorder = [9,3,15,20,7]

Output:

[3,9,20,null,null,15,7]

๐Ÿ”น Example 2:

Input:

preorder = [-1]
inorder = [-1]

Output:

[-1]

Constraints โš™๏ธ

  • 1 <= preorder.length <= 3000

  • inorder.length == preorder.length

  • -3000 <= preorder[i], inorder[i] <= 3000

  • preorder and inorder consist of unique values.

  • Each value in inorder also appears in preorder.

  • preorder is guaranteed to be the preorder traversal of the tree.

  • inorder is guaranteed to be the inorder traversal of the tree.


Solution ๐Ÿ’ก

To construct the binary tree:

  1. The first value in preorder is the root node.

  2. Find the root node's position in inorder. Values to the left belong to the left subtree, and values to the right belong to the right subtree.

  3. Recursively repeat this process for the left and right subtrees.


Java Solution

import java.util.HashMap;

class Solution {
    private int preorderIndex = 0;
    private HashMap<Integer, Integer> inorderIndexMap;

    public TreeNode buildTree(int[] preorder, int[] inorder) {
        // Create a map to store the index of each value in the inorder array
        inorderIndexMap = new HashMap<>();
        for (int i = 0; i < inorder.length; i++) {
            inorderIndexMap.put(inorder[i], i);
        }

        return buildSubtree(preorder, 0, inorder.length - 1);
    }

    private TreeNode buildSubtree(int[] preorder, int left, int right) {
        if (left > right) {
            return null; // Base case: no elements to construct the tree
        }

        // Get the current root value from preorder
        int rootValue = preorder[preorderIndex++];
        TreeNode root = new TreeNode(rootValue);

        // Find the index of the root value in the inorder array
        int inorderIndex = inorderIndexMap.get(rootValue);

        // Recursively construct the left and right subtrees
        root.left = buildSubtree(preorder, left, inorderIndex - 1);
        root.right = buildSubtree(preorder, inorderIndex + 1, right);

        return root;
    }
}

Explanation of the Solution

  1. Preorder Traversal:

    • The first element is the root.

    • Subsequent elements belong to the left or right subtree.

  2. Inorder Traversal:

    • Left subtree elements come before the root.

    • Right subtree elements come after the root.

  3. Recursive Construction:

    • Use the preorder array to pick the root.

    • Divide the inorder array into left and right subtrees.

    • Recursively construct the tree for both subtrees.


Time Complexity โณ

  • O(n), where n is the number of nodes. Each node is visited once, and the HashMap provides O(1) lookups for the index.

Space Complexity ๐Ÿ’พ

  • O(n) for the HashMap and recursive stack space.


Follow-up Challenges ๐Ÿง

  • What changes would you make to solve the problem if the tree was not guaranteed to have unique values?

  • How would the approach differ for constructing a binary search tree?

You can find the full solution .

here
LeetCode Problem Link