Construct Binary Search Tree from Preorder Traversal

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:

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

Example 2:

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

 

Constraints:

  • 1 <= preorder.length <= 100
  • 1 <= preorder[i] <= 1000
  • All the values of preorder are unique.
SOLUTION:
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def getRoot(self, p, q):
        return min((i for i in range(p, q)), key = lambda x: self.valIndex[self.inorder[x]])
    
    def buildTreeRec(self, p, q):
        if p < q:
            root = TreeNode()
            currRoot = self.getRoot(p, q)
            root.val = self.inorder[currRoot]
            if currRoot > p:
                root.left = TreeNode()
                root.left = self.buildTreeRec(p, currRoot)
            if currRoot < q - 1:
                root.right = TreeNode()
                root.right = self.buildTreeRec(currRoot + 1, q)
            return root
    
    def bstFromPreorder(self, preorder: List[int]) -> Optional[TreeNode]:
        n = len(preorder)
        self.inorder = sorted(preorder)
        self.valIndex = {}
        for i, item in enumerate(preorder):
            self.valIndex[item] = i
        return self.buildTreeRec(0, n)

Comments

Popular posts from this blog

Encrypt and Decrypt Strings

Degree of an Array

Minimum Sum of Four Digit Number After Splitting Digits