the root would be one of the solution, the only difficulty is when we find another node in the solution, we need to handle all nodes greater or smaller than that node.

With a recursive way, we can pass the solution node and the extra piece all the way up to the root

```
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<TreeNode*> splitBST(TreeNode* root, int V) {
if(!root) return {NULL, NULL};
if(root -> val <= V)
{
auto next = splitBST(root -> right, V);
root -> right = next[0];
return {root, next[1]};
}
auto next = splitBST(root -> left, V);
root -> left = next[1];
return {next[0], root};
}
};
```