55
66class MyQueue :
77 __slots__ = ("data" , "head" , "tail" )
8-
8+
99 def __init__ (self ) -> None :
1010 self .data : list [Any ] = []
1111 self .head = self .tail = 0
@@ -24,24 +24,24 @@ def pop(self) -> Any:
2424
2525class MyNode :
2626 __slots__ = ("data" , "height" , "left" , "right" ) # 按字母顺序排序
27-
27+
2828 def __init__ (self , data : Any ) -> None :
2929 self .data = data
3030 self .height = 1
3131 self .left : MyNode | None = None
3232 self .right : MyNode | None = None
3333
34- def get_height (node : MyNode | None ) -> int :
34+ def get_height (node : MyNode | None ) -> int :
3535 return node .height if node else 0
3636
37- def my_max (a : int , b : int ) -> int :
37+ def my_max (a : int , b : int ) -> int :
3838 return a if a > b else b
3939
4040def right_rotation (node : MyNode ) -> MyNode :
4141 left_child = node .left
4242 if left_child is None :
4343 return node
44-
44+
4545 node .left = left_child .right
4646 left_child .right = node
4747 node .height = my_max (get_height (node .right ), get_height (node .left )) + 1
@@ -52,7 +52,7 @@ def left_rotation(node: MyNode) -> MyNode:
5252 right_child = node .right
5353 if right_child is None :
5454 return node
55-
55+
5656 node .right = right_child .left
5757 right_child .left = node
5858 node .height = my_max (get_height (node .right ), get_height (node .left )) + 1
@@ -72,7 +72,7 @@ def rl_rotation(node: MyNode) -> MyNode:
7272def insert_node (node : MyNode | None , data : Any ) -> MyNode | None :
7373 if node is None :
7474 return MyNode (data )
75-
75+
7676 if data < node .data :
7777 node .left = insert_node (node .left , data )
7878 if get_height (node .left ) - get_height (node .right ) == 2 :
@@ -87,7 +87,7 @@ def insert_node(node: MyNode | None, data: Any) -> MyNode | None:
8787 node = rl_rotation (node )
8888 else :
8989 node = left_rotation (node )
90-
90+
9191 node .height = my_max (get_height (node .right ), get_height (node .left )) + 1
9292 return node
9393
@@ -109,14 +109,14 @@ def del_node(root: MyNode | None, data: Any) -> MyNode | None:
109109 root .left = del_node (root .left , data )
110110 else :
111111 root .right = del_node (root .right , data )
112-
112+
113113 if root .left is None and root .right is None :
114114 root .height = 1
115115 return root
116-
116+
117117 left_height = get_height (root .left )
118118 right_height = get_height (root .right )
119-
119+
120120 if right_height - left_height == 2 :
121121 right_right = get_height (root .right .right ) if root .right else 0
122122 right_left = get_height (root .right .left ) if root .right else 0
@@ -127,37 +127,37 @@ def del_node(root: MyNode | None, data: Any) -> MyNode | None:
127127 left_right = get_height (root .left .right ) if root .left else 0
128128 # 使用三元表达式
129129 root = right_rotation (root ) if left_left > left_right else lr_rotation (root )
130-
130+
131131 root .height = my_max (get_height (root .right ), get_height (root .left )) + 1
132132 return root
133133
134134class AVLTree :
135135 __slots__ = ("root" ,)
136-
137- def __init__ (self ) -> None :
136+
137+ def __init__ (self ) -> None :
138138 self .root : MyNode | None = None
139-
140- def get_height (self ) -> int :
139+
140+ def get_height (self ) -> int :
141141 return get_height (self .root )
142-
142+
143143 def insert (self , data : Any ) -> None :
144144 self .root = insert_node (self .root , data )
145-
145+
146146 def delete (self , data : Any ) -> None :
147147 self .root = del_node (self .root , data )
148-
148+
149149 def __str__ (self ) -> str :
150150 if self .root is None :
151151 return ""
152-
152+
153153 levels = []
154154 # 明确指定类型为 MyNode | None
155155 queue : list [MyNode | None ] = [self .root ]
156-
156+
157157 while queue :
158158 current = []
159159 next_level : list [MyNode | None ] = []
160-
160+
161161 for node in queue :
162162 if node :
163163 current .append (str (node .data ))
@@ -166,25 +166,25 @@ def __str__(self) -> str:
166166 else :
167167 current .append ("*" )
168168 next_level .extend ([None , None ])
169-
169+
170170 if any (node is not None for node in next_level ):
171171 levels .append (" " .join (current ))
172172 queue = next_level
173173 else :
174174 if current : # 添加最后一行
175175 levels .append (" " .join (current ))
176176 break
177-
177+
178178 return "\n " .join (levels ) + "\n " + "*" * 36
179179
180180def test_avl_tree () -> None :
181181 t = AVLTree ()
182182 lst = list (range (10 ))
183183 random .shuffle (lst )
184-
184+
185185 for i in lst :
186186 t .insert (i )
187-
187+
188188 random .shuffle (lst )
189189 for i in lst :
190190 t .delete (i )
0 commit comments