# 1008. Construct Binary Search Tree from Preorder Traversal

[**1008. Construct Binary Search Tree from Preorder Traversal**](https://leetcode.com/problems/construct-binary-search-tree-from-preorder-traversal/)

Return the root node of a binary **search** tree that matches the given `preorder` traversal.

*(Recall that a binary search tree is a binary tree where for every node, any descendant of `node.left` has a value `<`* *`node.val`, and any descendant of `node.right` has a value `>`* *`node.val`.  Also recall that a preorder traversal displays the value of the `node` first, then traverses `node.left`, then traverses `node.right`.)*

**Example 1:**

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

**Note:**&#x20;

1. `1 <= preorder.length <= 100`
2. The values of `preorder` are distinct.

***My Solutions:***

```
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public TreeNode bstFromPreorder(int[] preorder) {
        if (preorder == null || preorder.length == 0) return null;
        TreeNode root = new TreeNode(preorder[0]);
        for (int i = 1; i < preorder.length; i++) {
            root = helper(root, preorder[i]);
        }       
        return root;
    }
    
    public TreeNode helper(TreeNode root, int val) {
        if (root == null) return new TreeNode(val);
        if (val < root.val) root.left = helper(root.left, val);
        else root.right = helper(root.right, val);
        return root;
    }
}
```
