Skip to content

Commit 88547f6

Browse files
AimaanhasanVanshika266
authored andcommitted
Fixed SelfBalancingBinaryTree (codezonediitj#238)
* Fixed SelfBalancingBinaryTree._left_rotate and SelfBalancingBinaryTree._right_rotate
1 parent 3ffb619 commit 88547f6

File tree

2 files changed

+40
-3
lines changed

2 files changed

+40
-3
lines changed

pydatastructs/trees/binary_trees.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -564,7 +564,10 @@ def _right_rotate(self, j, k):
564564
self.tree[j].left = y
565565
self.tree[k].parent = self.tree[j].parent
566566
if self.tree[k].parent is not None:
567-
self.tree[self.tree[k].parent].left = k
567+
if self.tree[self.tree[k].parent].left == j:
568+
self.tree[self.tree[k].parent].left = k
569+
else:
570+
self.tree[self.tree[k].parent].right = k
568571
self.tree[j].parent = k
569572
self.tree[k].right = j
570573
kp = self.tree[k].parent
@@ -618,7 +621,10 @@ def _left_rotate(self, j, k):
618621
self.tree[j].right = y
619622
self.tree[k].parent = self.tree[j].parent
620623
if self.tree[k].parent is not None:
621-
self.tree[self.tree[k].parent].right = k
624+
if self.tree[self.tree[k].parent].left == j:
625+
self.tree[self.tree[k].parent].left = k
626+
else:
627+
self.tree[self.tree[k].parent].right = k
622628
self.tree[j].parent = k
623629
self.tree[k].left = j
624630
kp = self.tree[k].parent

pydatastructs/trees/tests/test_binary_trees.py

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from pydatastructs.trees.binary_trees import (
22
BinarySearchTree, BinaryTreeTraversal, AVLTree,
3-
ArrayForTrees, BinaryIndexedTree, SplayTree)
3+
ArrayForTrees, BinaryIndexedTree, SelfBalancingBinaryTree, SplayTree)
44
from pydatastructs.utils.raises_util import raises
55
from pydatastructs.utils.misc_util import TreeNode
66
from copy import deepcopy
@@ -320,6 +320,7 @@ def test_BinaryIndexedTree():
320320
assert t.get_sum(0, 4) == 114
321321
assert t.get_sum(1, 9) == 54
322322

323+
<<<<<<< HEAD
323324
def test_SplayTree():
324325
t = SplayTree(100, 100)
325326
t.insert(50, 50)
@@ -345,3 +346,33 @@ def test_SplayTree():
345346

346347
assert str(s) == ("[(1, 2000, 2000, None), (None, 1000, 1000, None)]")
347348
assert str(t) == ("[(None, 100, 100, None), '', (6, 200, 200, None), (4, 50, 50, None), (5, 30, 30, None), (None, 20, 20, None), (3, 55, 55, 0), '', '']")
349+
=======
350+
def test_issue_234():
351+
"""
352+
https://github.com/codezonediitj/pydatastructs/issues/234
353+
"""
354+
tree = SelfBalancingBinaryTree()
355+
tree.insert(5, 5)
356+
tree.insert(5.5, 5.5)
357+
tree.insert(4.5, 4.5)
358+
tree.insert(4.6, 4.6)
359+
tree.insert(4.4, 4.4)
360+
tree.insert(4.55, 4.55)
361+
tree.insert(4.65, 4.65)
362+
original_tree = str(tree)
363+
tree._right_rotate(3, 5)
364+
assert tree.tree[3].parent == 5
365+
assert tree.tree[2].right != 3
366+
assert tree.tree[tree.tree[5].parent].right == 5
367+
assert str(tree) == ("[(2, 5, 5, 1), (None, 5.5, 5.5, None), "
368+
"(4, 4.5, 4.5, 5), (None, 4.6, 4.6, 6), "
369+
"(None, 4.4, 4.4, None), (None, 4.55, 4.55, 3), "
370+
"(None, 4.65, 4.65, None)]")
371+
assert tree.tree[tree.tree[3].parent].right == 3
372+
tree._left_rotate(5, 3)
373+
assert str(tree) == original_tree
374+
tree.insert(4.54, 4.54)
375+
tree.insert(4.56, 4.56)
376+
tree._left_rotate(5, 8)
377+
assert tree.tree[tree.tree[8].parent].left == 8
378+
>>>>>>> Fixed SelfBalancingBinaryTree (#238)

0 commit comments

Comments
 (0)