diff --git a/0784_insert-into-a-binary-search-tree/README.md b/0784_insert-into-a-binary-search-tree/README.md new file mode 100644 index 0000000..300ac86 --- /dev/null +++ b/0784_insert-into-a-binary-search-tree/README.md @@ -0,0 +1,33 @@ +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://assets.leetcode.com/uploads/2020/10/05/insertbst.jpg) + + Input: root = [4,2,7,1,3], val = 5 + Output: [4,2,7,1,3,5] + Explanation: Another accepted tree is: + + + +**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. \ No newline at end of file diff --git a/0784_insert-into-a-binary-search-tree/python3/solution.py b/0784_insert-into-a-binary-search-tree/python3/solution.py new file mode 100644 index 0000000..cba2e2f --- /dev/null +++ b/0784_insert-into-a-binary-search-tree/python3/solution.py @@ -0,0 +1,31 @@ +# 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 root == None: + return TreeNode(val) + + current = root + parent = None + + while True: + if val < current.val: + if current.left == None: + current.left = TreeNode(val) + break + + parent = current + current = current.left + elif val >= current.val: + if current.right == None: + current.right = TreeNode(val) + break + + parent = current + current = current.right + + return root