@@ -214,8 +214,9 @@ def _test_AVLTree(backend):
214
214
assert [node .key for node in in_order ] == [1 ]
215
215
assert [node .key for node in pre_order ] == [1 ]
216
216
217
- a3 = AVLTree (0 ,0 ,backend = backend )
218
- for i in range (1 ,7 ):
217
+ a3 = AVLTree ()
218
+ a3 .set_tree ( ArrayForTrees (TreeNode , 0 , backend = backend ) )
219
+ for i in range (0 ,7 ):
219
220
a3 .tree .append (TreeNode (i , i , backend = backend ))
220
221
a3 .tree [0 ].left = 1
221
222
a3 .tree [0 ].right = 6
@@ -224,15 +225,17 @@ def _test_AVLTree(backend):
224
225
a3 .tree [2 ].left = 3
225
226
a3 .tree [2 ].right = 4
226
227
a3 ._left_right_rotate (0 , 1 )
228
+ assert str (a3 ) == "[(4, 0, 0, 6), (5, 1, 1, 3), (1, 2, 2, 0), (None, 3, 3, None), (None, 4, 4, None), (None, 5, 5, None), (None, 6, 6, None)]"
227
229
228
230
trav = BinaryTreeTraversal (a3 , backend = backend )
229
231
in_order = trav .depth_first_search (order = 'in_order' )
230
232
pre_order = trav .depth_first_search (order = 'pre_order' )
231
233
assert [node .key for node in in_order ] == [5 , 1 , 3 , 2 , 4 , 0 , 6 ]
232
234
assert [node .key for node in pre_order ] == [2 , 1 , 5 , 3 , 0 , 4 , 6 ]
233
235
234
- a4 = AVLTree (0 ,0 ,backend = backend )
235
- for i in range (1 ,7 ):
236
+ a4 = AVLTree ()
237
+ a4 .set_tree ( ArrayForTrees (TreeNode , 0 , backend = backend ) )
238
+ for i in range (0 ,7 ):
236
239
a4 .tree .append (TreeNode (i , i ,backend = backend ))
237
240
a4 .tree [0 ].left = 1
238
241
a4 .tree [0 ].right = 2
@@ -250,7 +253,7 @@ def _test_AVLTree(backend):
250
253
251
254
a5 = AVLTree (is_order_statistic = True ,backend = backend )
252
255
if backend == Backend .PYTHON :
253
- a5 .tree = ArrayForTrees (TreeNode , [
256
+ a5 .set_tree ( ArrayForTrees (TreeNode , [
254
257
TreeNode (10 , 10 ),
255
258
TreeNode (5 , 5 ),
256
259
TreeNode (17 , 17 ),
@@ -265,9 +268,9 @@ def _test_AVLTree(backend):
265
268
TreeNode (30 , 30 ),
266
269
TreeNode (13 , 13 ),
267
270
TreeNode (33 , 33 )
268
- ])
271
+ ]) )
269
272
else :
270
- a5 .tree = ArrayForTrees (_nodes .TreeNode , [
273
+ a5 .set_tree ( ArrayForTrees (_nodes .TreeNode , [
271
274
TreeNode (10 , 10 ,backend = backend ),
272
275
TreeNode (5 , 5 ,backend = backend ),
273
276
TreeNode (17 , 17 ,backend = backend ),
@@ -282,7 +285,7 @@ def _test_AVLTree(backend):
282
285
TreeNode (30 , 30 ,backend = backend ),
283
286
TreeNode (13 , 13 ,backend = backend ),
284
287
TreeNode (33 , 33 ,backend = backend )
285
- ],backend = backend )
288
+ ],backend = backend ) )
286
289
287
290
a5 .tree [0 ].left , a5 .tree [0 ].right , a5 .tree [0 ].parent , a5 .tree [0 ].height = \
288
291
1 , 2 , None , 4
@@ -328,30 +331,32 @@ def _test_AVLTree(backend):
328
331
a5 .tree [11 ].size = 2
329
332
a5 .tree [12 ].size = 1
330
333
a5 .tree [13 ].size = 1
331
-
332
- # assert raises(ValueError, lambda: a5.select(0))
333
- # assert raises(ValueError, lambda: a5.select(15))
334
- # assert a5.rank(-1) is None
335
- # def test_select_rank(expected_output):
336
- # output = []
337
- # for i in range(len(expected_output)):
338
- # output.append(a5.select(i + 1).key)
339
- # assert output == expected_output
340
-
341
- # output = []
342
- # expected_ranks = [i + 1 for i in range(len(expected_output))]
343
- # for i in range(len(expected_output)):
344
- # output.append(a5.rank(expected_output[i]))
345
- # assert output == expected_ranks
346
-
347
- # test_select_rank([2, 3, 5, 9, 10, 11, 12, 13, 15, 17, 18, 20, 30, 33])
334
+ assert str (a5 ) == "[(1, 10, 10, 2), (3, 5, 5, 4), (5, 17, 17, 6), (None, 2, 2, 7), (None, 9, 9, None), (8, 12, 12, 9), (10, 20, 20, 11), (None, 3, 3, None), (None, 11, 11, None), (12, 15, 15, None), (None, 18, 18, None), (None, 30, 30, 13), (None, 13, 13, None), (None, 33, 33, None)]"
335
+
336
+ assert raises (ValueError , lambda : a5 .select (0 ))
337
+ assert raises (ValueError , lambda : a5 .select (15 ))
338
+
339
+ assert a5 .rank (- 1 ) is None
340
+ def test_select_rank (expected_output ):
341
+ output = []
342
+ for i in range (len (expected_output )):
343
+ output .append (a5 .select (i + 1 ).key )
344
+ assert output == expected_output
345
+
346
+ output = []
347
+ expected_ranks = [i + 1 for i in range (len (expected_output ))]
348
+ for i in range (len (expected_output )):
349
+ output .append (a5 .rank (expected_output [i ]))
350
+ assert output == expected_ranks
351
+
352
+ test_select_rank ([2 , 3 , 5 , 9 , 10 , 11 , 12 , 13 , 15 , 17 , 18 , 20 , 30 , 33 ])
348
353
# a5.delete(9)
349
354
# a5.delete(13)
350
355
# a5.delete(20)
351
356
352
- # trav = BinaryTreeTraversal(a5)
353
- # in_order = trav.depth_first_search(order='in_order')
354
- # pre_order = trav.depth_first_search(order='pre_order')
357
+ trav = BinaryTreeTraversal (a5 )
358
+ in_order = trav .depth_first_search (order = 'in_order' )
359
+ pre_order = trav .depth_first_search (order = 'pre_order' )
355
360
# assert [node.key for node in in_order] == [2, 3, 5, 10, 11, 12, 15, 17, 18, 30, 33]
356
361
# assert [node.key for node in pre_order] == [17, 10, 3, 2, 5, 12, 11, 15, 30, 18, 33]
357
362
@@ -384,7 +389,7 @@ def test_cpp_AVLTree():
384
389
_test_AVLTree (backend = Backend .CPP )
385
390
386
391
test_AVLTree ()
387
- test_cpp_AVLTree ()
392
+ # test_cpp_AVLTree()
388
393
389
394
def _test_BinaryIndexedTree (backend ):
390
395
0 commit comments