From df21a31267a8e2b60e77ef23cde35c5743c263f0 Mon Sep 17 00:00:00 2001 From: pro100ton Date: Sun, 23 Feb 2025 20:11:58 +0300 Subject: [PATCH] Add some binary trees tasks --- .../delete_from_binary_tree/README.md | 0 .../delete_from_binary_tree/solution.py | 0 .../insert_into_binary_tree/README.md | 30 +++++++++++++++++ .../insert_into_binary_tree/solution.py | 30 +++++++++++++++++ .../search_in_a_binary_tree/README.md | 18 +++++++++++ .../search_in_a_binary_tree/solution.py | 32 +++++++++++++++++++ 6 files changed, 110 insertions(+) create mode 100644 neetcode/binary_trees/delete_from_binary_tree/README.md create mode 100644 neetcode/binary_trees/delete_from_binary_tree/solution.py create mode 100644 neetcode/binary_trees/insert_into_binary_tree/README.md create mode 100644 neetcode/binary_trees/insert_into_binary_tree/solution.py create mode 100644 neetcode/binary_trees/search_in_a_binary_tree/README.md create mode 100644 neetcode/binary_trees/search_in_a_binary_tree/solution.py diff --git a/neetcode/binary_trees/delete_from_binary_tree/README.md b/neetcode/binary_trees/delete_from_binary_tree/README.md new file mode 100644 index 0000000..e69de29 diff --git a/neetcode/binary_trees/delete_from_binary_tree/solution.py b/neetcode/binary_trees/delete_from_binary_tree/solution.py new file mode 100644 index 0000000..e69de29 diff --git a/neetcode/binary_trees/insert_into_binary_tree/README.md b/neetcode/binary_trees/insert_into_binary_tree/README.md new file mode 100644 index 0000000..a594150 --- /dev/null +++ b/neetcode/binary_trees/insert_into_binary_tree/README.md @@ -0,0 +1,30 @@ +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: + + +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. diff --git a/neetcode/binary_trees/insert_into_binary_tree/solution.py b/neetcode/binary_trees/insert_into_binary_tree/solution.py new file mode 100644 index 0000000..19e08ce --- /dev/null +++ b/neetcode/binary_trees/insert_into_binary_tree/solution.py @@ -0,0 +1,30 @@ +from typing import Optional + + +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, None, None) + if val < root.val: + root.left = self.insertIntoBST(root.left, val) + elif val > root.val: + root.right = self.insertIntoBST(root.right, val) + return root + + +if __name__ == "__main__": + s = Solution() + n10 = TreeNode(1, None, None) + n9 = TreeNode(3, None, None) + n8 = TreeNode(2, n10, n9) + n7 = TreeNode(7, None, None) + root = TreeNode(4, n8, n7) + + # print(s.searchBST(root, 2).val) diff --git a/neetcode/binary_trees/search_in_a_binary_tree/README.md b/neetcode/binary_trees/search_in_a_binary_tree/README.md new file mode 100644 index 0000000..b512f7b --- /dev/null +++ b/neetcode/binary_trees/search_in_a_binary_tree/README.md @@ -0,0 +1,18 @@ +700. Search in a Binary Search Tree +You are given the root of a binary search tree (BST) and an integer val. + +Find the node in the BST that the node's value equals val and return the subtree rooted with that node. If such a node does not exist, return null. + +Example 1: +Input: root = [4,2,7,1,3], val = 2 +Output: [2,1,3] + +Example 2: +Input: root = [4,2,7,1,3], val = 5 +Output: [] + +Constraints: +The number of nodes in the tree is in the range [1, 5000]. +1 <= Node.val <= 107 +root is a binary search tree. +1 <= val <= 107 diff --git a/neetcode/binary_trees/search_in_a_binary_tree/solution.py b/neetcode/binary_trees/search_in_a_binary_tree/solution.py new file mode 100644 index 0000000..a25f89b --- /dev/null +++ b/neetcode/binary_trees/search_in_a_binary_tree/solution.py @@ -0,0 +1,32 @@ +from typing import Optional + + +class TreeNode: + def __init__(self, val=0, left=None, right=None): + self.val = val + self.left = left + self.right = right + + +class Solution: + def searchBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]: + if not root: + return None + + if val < root.val: + return self.searchBST(root.left, val) + elif val > root.val: + return self.searchBST(root.right, val) + else: + return root + + +if __name__ == "__main__": + s = Solution() + n10 = TreeNode(1, None, None) + n9 = TreeNode(3, None, None) + n8 = TreeNode(2, n10, n9) + n7 = TreeNode(7, None, None) + root = TreeNode(4, n8, n7) + + print(s.searchBST(root, 2).val)