Skip to content

Commit 78cb429

Browse files
committed
fixed elif statement
2 parents 8b8c832 + cb5762c commit 78cb429

File tree

1 file changed

+33
-15
lines changed

1 file changed

+33
-15
lines changed

data_structures/binary_tree/segment_tree_node.py

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,18 @@ def __init__(self, start: int, end: int) -> None:
77
self.left = None
88
self.right = None
99

10+
1011
class SegmentTree:
11-
def __init__(self, nums: list[int], mode: str='max') -> None:
12+
def __init__(self, nums: list[int], mode: str = "max") -> None:
1213
"""
1314
Initializes the Segment Tree.
1415
:param nums: List of integers to build the tree from.
1516
:param mode: Operation mode of the tree ('max' or 'sum').
1617
"""
1718
self.size = len(nums)
1819
self.mode = mode
19-
if mode not in {'max', 'sum'}:
20-
self.mode = 'max' # Default to max if invalid mode is given
20+
if mode not in {"max", "sum"}:
21+
self.mode = "max" # Default to max if invalid mode is given
2122

2223
# Build the tree from the input list
2324
self.root = self.build(0, self.size - 1, nums)
@@ -45,7 +46,7 @@ def build(self, start: int, end: int, nums: list[int]) -> Node:
4546
root.right = self.build(mid + 1, end, nums)
4647

4748
# Set the value according to the mode
48-
if self.mode == 'max':
49+
if self.mode == "max":
4950
root.value = max(root.left.value, root.right.value)
5051
else:
5152
root.value = root.left.value + root.right.value
@@ -57,11 +58,11 @@ def max_in_range(self, start_index: int, end_index: int) -> int:
5758
Queries the maximum value in a given range.
5859
Only works in 'max' mode.
5960
"""
60-
if self.mode == 'sum':
61-
raise Exception('Current Segment Tree doesn\'t support finding max')
61+
if self.mode == "sum":
62+
raise Exception("Current Segment Tree doesn't support finding max")
6263

6364
if start_index > end_index or start_index < 0 or end_index >= self.size:
64-
raise Exception('Invalid index')
65+
raise Exception("Invalid index")
6566

6667
return self.query(self.root, start_index, end_index, 0, self.size - 1)
6768

@@ -70,15 +71,17 @@ def sum_in_range(self, start_index: int, end_index: int) -> int:
7071
Queries the sum of values in a given range.
7172
Only works in 'sum' mode.
7273
"""
73-
if self.mode == 'max':
74-
raise Exception('Current Segment Tree doesn\'t support summing')
74+
if self.mode == "max":
75+
raise Exception("Current Segment Tree doesn't support summing")
7576

7677
if start_index > end_index or start_index < 0 or end_index >= self.size:
77-
raise Exception('Invalid index')
78+
raise Exception("Invalid index")
7879

7980
return self.query(self.root, start_index, end_index, 0, self.size - 1)
8081

81-
def query(self, node: Node, start_index: int, end_index: int, start: int, end: int) -> int:
82+
def query(
83+
self, node: Node, start_index: int, end_index: int, start: int, end: int
84+
) -> int:
8285
"""
8386
Recursively queries a value (max or sum) in a given range.
8487
:param node: Current node in the tree.
@@ -103,7 +106,20 @@ def query(self, node: Node, start_index: int, end_index: int, start: int, end: i
103106
elif self.mode == 'max':
104107
return max(self.query(node.left, start_index, end_index, start, mid), self.query(node.right, start_index, end_index, mid + 1, end))
105108
else:
109+
<<<<<<< HEAD
106110
return self.query(node.left, start_index, end_index, start, mid) + self.query(node.right, start_index, end_index, mid + 1, end)
111+
=======
112+
# Range spans both children
113+
if self.mode == "max":
114+
return max(
115+
self.query(node.left, start_index, end_index, start, mid),
116+
self.query(node.right, start_index, end_index, mid + 1, end),
117+
)
118+
else:
119+
return self.query(
120+
node.left, start_index, end_index, start, mid
121+
) + self.query(node.right, start_index, end_index, mid + 1, end)
122+
>>>>>>> cb5762c2a5f27c98c3a8958b8977ac23c9e2f0aa
107123

108124
def update(self, index: int, new_value: int) -> int:
109125
"""
@@ -112,11 +128,13 @@ def update(self, index: int, new_value: int) -> int:
112128
:param new_value: New value to set.
113129
"""
114130
if index < 0 or index >= self.size:
115-
raise Exception('Invalid index')
131+
raise Exception("Invalid index")
116132

117133
self.modify(self.root, index, new_value, 0, self.size - 1)
118134

119-
def modify(self, node: Node, index: int, new_value: int, start: int, end: int) -> int:
135+
def modify(
136+
self, node: Node, index: int, new_value: int, start: int, end: int
137+
) -> int:
120138
"""
121139
Recursively updates the tree to reflect a change at a specific index.
122140
:param node: Current node being processed.
@@ -137,7 +155,7 @@ def modify(self, node: Node, index: int, new_value: int, start: int, end: int) -
137155
self.modify(node.right, index, new_value, mid + 1, end)
138156

139157
# Recompute current node's value after update
140-
if self.mode == 'max':
158+
if self.mode == "max":
141159
node.value = max(node.left.value, node.right.value)
142160
else:
143-
node.value = node.left.value + node.right.value
161+
node.value = node.left.value + node.right.value

0 commit comments

Comments
 (0)