1008. 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`.)

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

Example 1:

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

```

Constraints:

• `1 <= preorder.length <= 100`
• `1 <= preorder[i] <= 10^8`
• The values of `preorder` are distinct.

1008. Construct Binary Search Tree from Preorder Traversal
``````struct Solution;
use rustgym_util::*;

trait Postorder {
fn from_vec(preorder: &[i32], inorder: &[i32]) -> Self;
}

fn from_vec(preorder: &[i32], inorder: &[i32]) -> Self {
let n = preorder.len();
if n == 0 {
None
} else {
if n == 1 {
tree!(preorder[0])
} else {
let i = inorder.binary_search(&preorder[0]).unwrap();
tree!(
preorder[0],
TreeLink::from_vec(&preorder[i + 1..], &inorder[i + 1..])
)
}
}
}
}

impl Solution {
fn bst_from_preorder(preorder: Vec<i32>) -> TreeLink {
let mut inorder: Vec<i32> = preorder.clone();
inorder.sort_unstable();