This commit is contained in:
Shaurya Bisht 2024-11-16 16:42:42 +05:30 committed by GitHub
commit 9943ada72e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 40 additions and 18 deletions

View File

@ -196,8 +196,13 @@ def get_left_most(root: MyNode) -> Any:
def del_node(root: MyNode, data: Any) -> MyNode | None:
if root is None:
print("Node is empty, nothing to delete")
return None
left_child = root.get_left()
right_child = root.get_right()
if root.get_data() == data:
if left_child is not None and right_child is not None:
temp_data = get_left_most(right_child)
@ -209,32 +214,40 @@ def del_node(root: MyNode, data: Any) -> MyNode | None:
root = right_child
else:
return None
elif root.get_data() > data:
elif data < root.get_data():
if left_child is None:
print("No such data")
print(f"No such data ({data}) exists in the left subtree.")
return root
else:
root.set_left(del_node(left_child, data))
# root.get_data() < data
elif right_child is None:
print(f"No such data ({data}) exists in the right subtree.")
return root
else:
root.set_right(del_node(right_child, data))
if get_height(right_child) - get_height(left_child) == 2:
# Update the height of the node
root.set_height(
1 + my_max(get_height(root.get_left()), get_height(root.get_right()))
)
# Get the balance factor
balance_factor = get_height(root.get_right()) - get_height(root.get_left())
# Balance the tree
if balance_factor == 2:
assert right_child is not None
if get_height(right_child.get_right()) > get_height(right_child.get_left()):
root = left_rotation(root)
else:
root = rl_rotation(root)
elif get_height(right_child) - get_height(left_child) == -2:
elif balance_factor == -2:
assert left_child is not None
if get_height(left_child.get_left()) > get_height(left_child.get_right()):
root = right_rotation(root)
else:
root = lr_rotation(root)
height = my_max(get_height(root.get_right()), get_height(root.get_left())) + 1
root.set_height(height)
return root

View File

@ -62,12 +62,17 @@ class RadixNode:
-- A (leaf)
--- A (leaf)
"""
# Case 1: If the word is the prefix of the node
# Case 1: If the word is empty, mark current node as leaf
if not word:
self.is_leaf = True
return
# Case 2: If the word is the prefix of the node
# Solution: We set the current node as leaf
if self.prefix == word and not self.is_leaf:
self.is_leaf = True
# Case 2: The node has no edges that have a prefix to the word
# Case 3: The node has no edges that have a prefix to the word
# Solution: We create an edge from the current node to a new one
# containing the word
elif word[0] not in self.nodes:
@ -79,12 +84,12 @@ class RadixNode:
word
)
# Case 3: The node prefix is equal to the matching
# Case 4: The node prefix is equal to the matching
# Solution: We insert remaining word on the next node
if remaining_prefix == "":
self.nodes[matching_string[0]].insert(remaining_word)
incoming_node.insert(remaining_word)
# Case 4: The word is greater equal to the matching
# Case 5: The word is greater equal to the matching
# Solution: Create a node in between both nodes, change
# prefixes and add the new node for the remaining word
else:

View File

@ -39,10 +39,12 @@ def frac_knapsack(vl, wt, w, n):
return (
0
if k == 0
else sum(vl[:k]) + (w - acc[k - 1]) * (vl[k]) / (wt[k])
else (
sum(vl[:k]) + (w - acc[k - 1]) * (vl[k]) / (wt[k])
if k != n
else sum(vl[:k])
)
)
if __name__ == "__main__":

View File

@ -204,9 +204,11 @@ class Matrix:
return Matrix(
[
[
(
self.minors().rows[row][column]
if (row + column) % 2 == 0
else self.minors().rows[row][column] * -1
)
for column in range(self.minors().num_columns)
]
for row in range(self.minors().num_rows)