[link](https://leetcode.com/problems/insert-into-a-binary-search-tree/) --- You are given the root node of a binary search tree (BST) and a value to insert into the tree. Return the root node of the BST after the insertion. It is guaranteed that the new value does not exist in the original BST. Notice that there may exist multiple valid ways for the insertion, as long as the tree remains a BST after insertion. You can return any of them. #### Example 1: ![](https://hackmd.io/_uploads/S1gZZQaXOh.png) Input: root = [4,2,7,1,3], val = 5 Output: [4,2,7,1,3,5] Explanation: Another accepted tree is: ![](https://hackmd.io/_uploads/rkDGQpQO3.png) #### Example 2: Input: root = [40,20,60,10,30,50,70], val = 25 Output: [40,20,60,10,30,50,70,null,null,25] #### Example 3: Input: root = [4,2,7,1,3,null,null,null,null,null,null], val = 5 Output: [4,2,7,1,3,5] #### Constraints: - The number of nodes in the tree will be in the range [0, 104]. - -108 <= Node.val <= 108 - All the values Node.val are unique. - -108 <= val <= 108 - It's guaranteed that val does not exist in the original BST. --- The given code provides a solution for inserting a node with a given value into a binary search tree (BST). It defines a class Solution with a method insertIntoBST. The method takes two parameters: root, which represents the root node of the BST, and val, which is the value to be inserted. The code first checks if the root is None, indicating an empty tree. In that case, it creates a new node with the given value and returns it as the new root. If the root is not None, it compares the value val with the root.val to determine whether the new node should be inserted in the left or right subtree. If val is greater than root.val, the code recursively calls the insertIntoBST function on the right subtree, updating root.right with the returned subtree. If val is less than root.val, the code recursively calls the function on the left subtree, updating root.left with the returned subtree. #### Solution 1 ```python= # 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 insertIntoBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]: if not root: return TreeNode(val) if val > root.val: root.right = self.insertIntoBST(root.right, val) elif val < root.val: root.left = self.insertIntoBST(root.left, val) return root ``` O(T): O(log(N)) O(S): O(log(N))