mirror of
https://github.com/TheAlgorithms/Python.git
synced 2025-07-05 17:34:49 +08:00
Enable ruff PLR5501 rule (#11332)
* Enable ruff PLR5501 rule * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
@ -215,11 +215,11 @@ def del_node(root: MyNode, data: Any) -> MyNode | None:
|
||||
return root
|
||||
else:
|
||||
root.set_left(del_node(left_child, data))
|
||||
else: # root.get_data() < data
|
||||
if right_child is None:
|
||||
return root
|
||||
else:
|
||||
root.set_right(del_node(right_child, data))
|
||||
# root.get_data() < data
|
||||
elif right_child is None:
|
||||
return root
|
||||
else:
|
||||
root.set_right(del_node(right_child, data))
|
||||
|
||||
if get_height(right_child) - get_height(left_child) == 2:
|
||||
assert right_child is not None
|
||||
|
@ -185,12 +185,11 @@ class BinarySearchTree:
|
||||
break
|
||||
else:
|
||||
parent_node = parent_node.left
|
||||
elif parent_node.right is None:
|
||||
parent_node.right = new_node
|
||||
break
|
||||
else:
|
||||
if parent_node.right is None:
|
||||
parent_node.right = new_node
|
||||
break
|
||||
else:
|
||||
parent_node = parent_node.right
|
||||
parent_node = parent_node.right
|
||||
new_node.parent = parent_node
|
||||
|
||||
def insert(self, *values) -> Self:
|
||||
|
@ -74,14 +74,13 @@ class BinarySearchTree:
|
||||
def _put(self, node: Node | None, label: int, parent: Node | None = None) -> Node:
|
||||
if node is None:
|
||||
node = Node(label, parent)
|
||||
elif label < node.label:
|
||||
node.left = self._put(node.left, label, node)
|
||||
elif label > node.label:
|
||||
node.right = self._put(node.right, label, node)
|
||||
else:
|
||||
if label < node.label:
|
||||
node.left = self._put(node.left, label, node)
|
||||
elif label > node.label:
|
||||
node.right = self._put(node.right, label, node)
|
||||
else:
|
||||
msg = f"Node with label {label} already exists"
|
||||
raise ValueError(msg)
|
||||
msg = f"Node with label {label} already exists"
|
||||
raise ValueError(msg)
|
||||
|
||||
return node
|
||||
|
||||
@ -106,11 +105,10 @@ class BinarySearchTree:
|
||||
if node is None:
|
||||
msg = f"Node with label {label} does not exist"
|
||||
raise ValueError(msg)
|
||||
else:
|
||||
if label < node.label:
|
||||
node = self._search(node.left, label)
|
||||
elif label > node.label:
|
||||
node = self._search(node.right, label)
|
||||
elif label < node.label:
|
||||
node = self._search(node.left, label)
|
||||
elif label > node.label:
|
||||
node = self._search(node.right, label)
|
||||
|
||||
return node
|
||||
|
||||
|
@ -107,12 +107,11 @@ class RedBlackTree:
|
||||
else:
|
||||
self.left = RedBlackTree(label, 1, self)
|
||||
self.left._insert_repair()
|
||||
elif self.right:
|
||||
self.right.insert(label)
|
||||
else:
|
||||
if self.right:
|
||||
self.right.insert(label)
|
||||
else:
|
||||
self.right = RedBlackTree(label, 1, self)
|
||||
self.right._insert_repair()
|
||||
self.right = RedBlackTree(label, 1, self)
|
||||
self.right._insert_repair()
|
||||
return self.parent or self
|
||||
|
||||
def _insert_repair(self) -> None:
|
||||
@ -178,36 +177,34 @@ class RedBlackTree:
|
||||
self.parent.left = None
|
||||
else:
|
||||
self.parent.right = None
|
||||
else:
|
||||
# The node is black
|
||||
if child is None:
|
||||
# This node and its child are black
|
||||
if self.parent is None:
|
||||
# The tree is now empty
|
||||
return RedBlackTree(None)
|
||||
else:
|
||||
self._remove_repair()
|
||||
if self.is_left():
|
||||
self.parent.left = None
|
||||
else:
|
||||
self.parent.right = None
|
||||
self.parent = None
|
||||
# The node is black
|
||||
elif child is None:
|
||||
# This node and its child are black
|
||||
if self.parent is None:
|
||||
# The tree is now empty
|
||||
return RedBlackTree(None)
|
||||
else:
|
||||
# This node is black and its child is red
|
||||
# Move the child node here and make it black
|
||||
self.label = child.label
|
||||
self.left = child.left
|
||||
self.right = child.right
|
||||
if self.left:
|
||||
self.left.parent = self
|
||||
if self.right:
|
||||
self.right.parent = self
|
||||
self._remove_repair()
|
||||
if self.is_left():
|
||||
self.parent.left = None
|
||||
else:
|
||||
self.parent.right = None
|
||||
self.parent = None
|
||||
else:
|
||||
# This node is black and its child is red
|
||||
# Move the child node here and make it black
|
||||
self.label = child.label
|
||||
self.left = child.left
|
||||
self.right = child.right
|
||||
if self.left:
|
||||
self.left.parent = self
|
||||
if self.right:
|
||||
self.right.parent = self
|
||||
elif self.label is not None and self.label > label:
|
||||
if self.left:
|
||||
self.left.remove(label)
|
||||
else:
|
||||
if self.right:
|
||||
self.right.remove(label)
|
||||
elif self.right:
|
||||
self.right.remove(label)
|
||||
return self.parent or self
|
||||
|
||||
def _remove_repair(self) -> None:
|
||||
@ -369,11 +366,10 @@ class RedBlackTree:
|
||||
return None
|
||||
else:
|
||||
return self.right.search(label)
|
||||
elif self.left is None:
|
||||
return None
|
||||
else:
|
||||
if self.left is None:
|
||||
return None
|
||||
else:
|
||||
return self.left.search(label)
|
||||
return self.left.search(label)
|
||||
|
||||
def floor(self, label: int) -> int | None:
|
||||
"""Returns the largest element in this tree which is at most label.
|
||||
|
@ -43,22 +43,21 @@ def split(root: Node | None, value: int) -> tuple[Node | None, Node | None]:
|
||||
return None, None
|
||||
elif root.value is None:
|
||||
return None, None
|
||||
elif value < root.value:
|
||||
"""
|
||||
Right tree's root will be current node.
|
||||
Now we split(with the same value) current node's left son
|
||||
Left tree: left part of that split
|
||||
Right tree's left son: right part of that split
|
||||
"""
|
||||
left, root.left = split(root.left, value)
|
||||
return left, root
|
||||
else:
|
||||
if value < root.value:
|
||||
"""
|
||||
Right tree's root will be current node.
|
||||
Now we split(with the same value) current node's left son
|
||||
Left tree: left part of that split
|
||||
Right tree's left son: right part of that split
|
||||
"""
|
||||
left, root.left = split(root.left, value)
|
||||
return left, root
|
||||
else:
|
||||
"""
|
||||
Just symmetric to previous case
|
||||
"""
|
||||
root.right, right = split(root.right, value)
|
||||
return root, right
|
||||
"""
|
||||
Just symmetric to previous case
|
||||
"""
|
||||
root.right, right = split(root.right, value)
|
||||
return root, right
|
||||
|
||||
|
||||
def merge(left: Node | None, right: Node | None) -> Node | None:
|
||||
|
@ -40,11 +40,10 @@ class BinaryHeap:
|
||||
while self.__size >= 2 * i:
|
||||
if 2 * i + 1 > self.__size:
|
||||
bigger_child = 2 * i
|
||||
elif self.__heap[2 * i] > self.__heap[2 * i + 1]:
|
||||
bigger_child = 2 * i
|
||||
else:
|
||||
if self.__heap[2 * i] > self.__heap[2 * i + 1]:
|
||||
bigger_child = 2 * i
|
||||
else:
|
||||
bigger_child = 2 * i + 1
|
||||
bigger_child = 2 * i + 1
|
||||
temporary = self.__heap[i]
|
||||
if self.__heap[i] < self.__heap[bigger_child]:
|
||||
self.__heap[i] = self.__heap[bigger_child]
|
||||
|
@ -95,13 +95,12 @@ def infix_2_postfix(infix: str) -> str:
|
||||
while stack[-1] != "(":
|
||||
post_fix.append(stack.pop()) # Pop stack & add the content to Postfix
|
||||
stack.pop()
|
||||
else:
|
||||
if len(stack) == 0:
|
||||
stack.append(x) # If stack is empty, push x to stack
|
||||
else: # while priority of x is not > priority of element in the stack
|
||||
while stack and stack[-1] != "(" and priority[x] <= priority[stack[-1]]:
|
||||
post_fix.append(stack.pop()) # pop stack & add to Postfix
|
||||
stack.append(x) # push x to stack
|
||||
elif len(stack) == 0:
|
||||
stack.append(x) # If stack is empty, push x to stack
|
||||
else: # while priority of x is not > priority of element in the stack
|
||||
while stack and stack[-1] != "(" and priority[x] <= priority[stack[-1]]:
|
||||
post_fix.append(stack.pop()) # pop stack & add to Postfix
|
||||
stack.append(x) # push x to stack
|
||||
|
||||
print(
|
||||
x.center(8),
|
||||
|
@ -153,31 +153,30 @@ class RadixNode:
|
||||
# We have word remaining so we check the next node
|
||||
elif remaining_word != "":
|
||||
return incoming_node.delete(remaining_word)
|
||||
# If it is not a leaf, we don't have to delete
|
||||
elif not incoming_node.is_leaf:
|
||||
return False
|
||||
else:
|
||||
# If it is not a leaf, we don't have to delete
|
||||
if not incoming_node.is_leaf:
|
||||
return False
|
||||
# We delete the nodes if no edges go from it
|
||||
if len(incoming_node.nodes) == 0:
|
||||
del self.nodes[word[0]]
|
||||
# We merge the current node with its only child
|
||||
if len(self.nodes) == 1 and not self.is_leaf:
|
||||
merging_node = next(iter(self.nodes.values()))
|
||||
self.is_leaf = merging_node.is_leaf
|
||||
self.prefix += merging_node.prefix
|
||||
self.nodes = merging_node.nodes
|
||||
# If there is more than 1 edge, we just mark it as non-leaf
|
||||
elif len(incoming_node.nodes) > 1:
|
||||
incoming_node.is_leaf = False
|
||||
# If there is 1 edge, we merge it with its child
|
||||
else:
|
||||
# We delete the nodes if no edges go from it
|
||||
if len(incoming_node.nodes) == 0:
|
||||
del self.nodes[word[0]]
|
||||
# We merge the current node with its only child
|
||||
if len(self.nodes) == 1 and not self.is_leaf:
|
||||
merging_node = next(iter(self.nodes.values()))
|
||||
self.is_leaf = merging_node.is_leaf
|
||||
self.prefix += merging_node.prefix
|
||||
self.nodes = merging_node.nodes
|
||||
# If there is more than 1 edge, we just mark it as non-leaf
|
||||
elif len(incoming_node.nodes) > 1:
|
||||
incoming_node.is_leaf = False
|
||||
# If there is 1 edge, we merge it with its child
|
||||
else:
|
||||
merging_node = next(iter(incoming_node.nodes.values()))
|
||||
incoming_node.is_leaf = merging_node.is_leaf
|
||||
incoming_node.prefix += merging_node.prefix
|
||||
incoming_node.nodes = merging_node.nodes
|
||||
merging_node = next(iter(incoming_node.nodes.values()))
|
||||
incoming_node.is_leaf = merging_node.is_leaf
|
||||
incoming_node.prefix += merging_node.prefix
|
||||
incoming_node.nodes = merging_node.nodes
|
||||
|
||||
return True
|
||||
return True
|
||||
|
||||
def print_tree(self, height: int = 0) -> None:
|
||||
"""Print the tree
|
||||
|
Reference in New Issue
Block a user