Add some binary trees tasks
This commit is contained in:
parent
3bad2db0f1
commit
df21a31267
6 changed files with 110 additions and 0 deletions
0
neetcode/binary_trees/delete_from_binary_tree/README.md
Normal file
0
neetcode/binary_trees/delete_from_binary_tree/README.md
Normal file
30
neetcode/binary_trees/insert_into_binary_tree/README.md
Normal file
30
neetcode/binary_trees/insert_into_binary_tree/README.md
Normal file
|
@ -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.
|
30
neetcode/binary_trees/insert_into_binary_tree/solution.py
Normal file
30
neetcode/binary_trees/insert_into_binary_tree/solution.py
Normal file
|
@ -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)
|
18
neetcode/binary_trees/search_in_a_binary_tree/README.md
Normal file
18
neetcode/binary_trees/search_in_a_binary_tree/README.md
Normal file
|
@ -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
|
32
neetcode/binary_trees/search_in_a_binary_tree/solution.py
Normal file
32
neetcode/binary_trees/search_in_a_binary_tree/solution.py
Normal file
|
@ -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)
|
Loading…
Reference in a new issue