MrainW's Home

All things come to those who wait!

0%

LeetCode 1008. Construct Binary Search Tree from Preorder Traversal

Question

Given an array of integers preorder, which represents the preorder traversal of a BST (i.e., binary search tree), construct the tree and return its root.

It is guaranteed that there is always possible to find a binary search tree with the given requirements for the given test cases.

A binary search tree is a binary tree where for every node, any descendant of Node.left has a value strictly less than Node.val, and any descendant of Node.right has a value strictly greater than Node.val.

A preorder traversal of a binary tree displays the value of the node first, then traverses Node.left, then traverses Node.right.

Example 1:

1
2
Input: preorder = [8,5,1,7,10,12]
Output: [8,5,10,1,7,null,12]

Example 2:

1
2
Input: preorder = [1,3]
Output: [1,null,3]

Solution

  • Solution1 – preorder traversal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
int index, N;
int[] preorder;
public TreeNode helper(int lower, int upper){
if (index == N) return null;
int val = preorder[index];
if (val < lower || val > upper) return null;
index ++;
TreeNode root = new TreeNode(val);
root.left = helper(lower, val);
root.right = helper(val, upper);
return root;
}
public TreeNode bstFromPreorder(int[] preorder) {
this.preorder = preorder;
N = preorder.length;
return helper(Integer.MIN_VALUE, Integer.MAX_VALUE);
}
}

Complexity:

Time complexity: O(n)

Space complexity: O(n)

Welcome to my other publishing channels