@@ -3,7 +3,7 @@ def __init__(self, start: int, end: int) -> None:
33 # Initializes a segment tree node with start and end indices
44 self .start = start
55 self .end = end
6- self .value : int | None = None
6+ self .value : int = None
77 self .left : Node | None = None
88 self .right : Node | None = None
99
@@ -23,7 +23,7 @@ def __init__(self, nums: list[int], mode: str = "max") -> None:
2323 # Build the tree from the input list
2424 self .root : Node | None = self .build (0 , self .size - 1 , nums )
2525
26- def build (self , start : int , end : int , nums : list [int ]) -> Node | None :
26+ def build (self , start : int , end : int , nums : list [int ]) -> Node :
2727 """
2828 Recursively builds the segment tree.
2929 :param start: Start index of the segment.
@@ -32,7 +32,7 @@ def build(self, start: int, end: int, nums: list[int]) -> Node| None:
3232 :return: Root node of the constructed subtree.
3333 """
3434 if start > end :
35- return None
35+ return
3636
3737 if start == end :
3838 # Leaf node
@@ -64,6 +64,9 @@ def max_in_range(self, start_index: int, end_index: int) -> int:
6464 if start_index > end_index or start_index < 0 or end_index >= self .size :
6565 raise Exception ("Invalid index" )
6666
67+ if self .root is None :
68+ raise ValueError ("Tree not initialized" )
69+
6770 return self .query (self .root , start_index , end_index , 0 , self .size - 1 )
6871
6972 def sum_in_range (self , start_index : int , end_index : int ) -> int :
@@ -77,6 +80,9 @@ def sum_in_range(self, start_index: int, end_index: int) -> int:
7780 if start_index > end_index or start_index < 0 or end_index >= self .size :
7881 raise Exception ("Invalid index" )
7982
83+ if self .root is None :
84+ raise ValueError ("Tree not initialized" )
85+
8086 return self .query (self .root , start_index , end_index , 0 , self .size - 1 )
8187
8288 def query (
@@ -113,7 +119,7 @@ def query(
113119 node .left , start_index , end_index , start , mid
114120 ) + self .query (node .right , start_index , end_index , mid + 1 , end )
115121
116- def update (self , index : int , new_value : int ) -> int :
122+ def update (self , index : int , new_value : int ) -> None :
117123 """
118124 Updates a value at a specific index in the segment tree.
119125 :param index: Index to update.
@@ -126,7 +132,7 @@ def update(self, index: int, new_value: int) -> int:
126132
127133 def modify (
128134 self , node : Node , index : int , new_value : int , start : int , end : int
129- ) -> int :
135+ ) -> None :
130136 """
131137 Recursively updates the tree to reflect a change at a specific index.
132138 :param node: Current node being processed.
@@ -150,4 +156,4 @@ def modify(
150156 if self .mode == "max" :
151157 node .value = max (node .left .value , node .right .value )
152158 else :
153- node .value = node .left .value + node .right .value
159+ node .value = node .left .value + node .right .value
0 commit comments