Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added new case in insert function #12067

Open
wants to merge 9 commits into
base: master
Choose a base branch
from
27 changes: 20 additions & 7 deletions data_structures/binary_tree/avl_tree.py
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was working in other issue related to binary_tree/avl_tree
These updates in this file are wrong already
It happened because I was using codespace and somehow it took changes that I made earlier to this file

Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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


Expand Down
15 changes: 10 additions & 5 deletions data_structures/trie/radix_tree.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,12 +62,17 @@ def insert(self, word: str) -> None:
-- 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:
Expand All @@ -79,12 +84,12 @@ def insert(self, word: str) -> None:
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:
Expand Down
8 changes: 5 additions & 3 deletions greedy_methods/fractional_knapsack.py
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This was automatically generated by the bot

Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,11 @@ def frac_knapsack(vl, wt, w, n):
return (
0
if k == 0
else sum(vl[:k]) + (w - acc[k - 1]) * (vl[k]) / (wt[k])
if k != n
else sum(vl[:k])
else (
sum(vl[:k]) + (w - acc[k - 1]) * (vl[k]) / (wt[k])
if k != n
else sum(vl[:k])
)
)


Expand Down
8 changes: 5 additions & 3 deletions matrix/matrix_class.py
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This was automatically generated by the bot

Original file line number Diff line number Diff line change
Expand Up @@ -204,9 +204,11 @@ def cofactors(self) -> Matrix:
return Matrix(
[
[
self.minors().rows[row][column]
if (row + column) % 2 == 0
else self.minors().rows[row][column] * -1
(
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)
Expand Down