Skip to content

Commit 307b13e

Browse files
authored
Fixed SelfBalancingBinaryTree (#238)
* Fixed SelfBalancingBinaryTree._left_rotate and SelfBalancingBinaryTree._right_rotate
1 parent b2bc6c9 commit 307b13e

File tree

2 files changed

+38
-3
lines changed

2 files changed

+38
-3
lines changed

pydatastructs/trees/binary_trees.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -563,7 +563,10 @@ def _right_rotate(self, j, k):
563563
self.tree[j].left = y
564564
self.tree[k].parent = self.tree[j].parent
565565
if self.tree[k].parent is not None:
566-
self.tree[self.tree[k].parent].left = k
566+
if self.tree[self.tree[k].parent].left == j:
567+
self.tree[self.tree[k].parent].left = k
568+
else:
569+
self.tree[self.tree[k].parent].right = k
567570
self.tree[j].parent = k
568571
self.tree[k].right = j
569572
kp = self.tree[k].parent
@@ -617,7 +620,10 @@ def _left_rotate(self, j, k):
617620
self.tree[j].right = y
618621
self.tree[k].parent = self.tree[j].parent
619622
if self.tree[k].parent is not None:
620-
self.tree[self.tree[k].parent].right = k
623+
if self.tree[self.tree[k].parent].left == j:
624+
self.tree[self.tree[k].parent].left = k
625+
else:
626+
self.tree[self.tree[k].parent].right = k
621627
self.tree[j].parent = k
622628
self.tree[k].left = j
623629
kp = self.tree[k].parent

pydatastructs/trees/tests/test_binary_trees.py

Lines changed: 30 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)
3+
ArrayForTrees, BinaryIndexedTree, SelfBalancingBinaryTree)
44
from pydatastructs.utils.raises_util import raises
55
from pydatastructs.utils.misc_util import TreeNode
66
from copy import deepcopy
@@ -319,3 +319,32 @@ def test_BinaryIndexedTree():
319319
assert t.get_sum(0, 2) == 105
320320
assert t.get_sum(0, 4) == 114
321321
assert t.get_sum(1, 9) == 54
322+
323+
def test_issue_234():
324+
"""
325+
https://github.com/codezonediitj/pydatastructs/issues/234
326+
"""
327+
tree = SelfBalancingBinaryTree()
328+
tree.insert(5, 5)
329+
tree.insert(5.5, 5.5)
330+
tree.insert(4.5, 4.5)
331+
tree.insert(4.6, 4.6)
332+
tree.insert(4.4, 4.4)
333+
tree.insert(4.55, 4.55)
334+
tree.insert(4.65, 4.65)
335+
original_tree = str(tree)
336+
tree._right_rotate(3, 5)
337+
assert tree.tree[3].parent == 5
338+
assert tree.tree[2].right != 3
339+
assert tree.tree[tree.tree[5].parent].right == 5
340+
assert str(tree) == ("[(2, 5, 5, 1), (None, 5.5, 5.5, None), "
341+
"(4, 4.5, 4.5, 5), (None, 4.6, 4.6, 6), "
342+
"(None, 4.4, 4.4, None), (None, 4.55, 4.55, 3), "
343+
"(None, 4.65, 4.65, None)]")
344+
assert tree.tree[tree.tree[3].parent].right == 3
345+
tree._left_rotate(5, 3)
346+
assert str(tree) == original_tree
347+
tree.insert(4.54, 4.54)
348+
tree.insert(4.56, 4.56)
349+
tree._left_rotate(5, 8)
350+
assert tree.tree[tree.tree[8].parent].left == 8

0 commit comments

Comments
 (0)