Skip to content

Fixed _left_rotate and _right_rotate #238

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 13 commits into from
Apr 6, 2020
Merged
10 changes: 8 additions & 2 deletions pydatastructs/trees/binary_trees.py
Original file line number Diff line number Diff line change
Expand Up @@ -563,7 +563,10 @@ def _right_rotate(self, j, k):
self.tree[j].left = y
self.tree[k].parent = self.tree[j].parent
if self.tree[k].parent is not None:
self.tree[self.tree[k].parent].left = k
if self.tree[self.tree[k].parent].left == j:
self.tree[self.tree[k].parent].left = k
else:
self.tree[self.tree[k].parent].right = k
self.tree[j].parent = k
self.tree[k].right = j
kp = self.tree[k].parent
Expand Down Expand Up @@ -617,7 +620,10 @@ def _left_rotate(self, j, k):
self.tree[j].right = y
self.tree[k].parent = self.tree[j].parent
if self.tree[k].parent is not None:
self.tree[self.tree[k].parent].right = k
if self.tree[self.tree[k].parent].left == j:
self.tree[self.tree[k].parent].left = k
else:
self.tree[self.tree[k].parent].right = k
self.tree[j].parent = k
self.tree[k].left = j
kp = self.tree[k].parent
Expand Down
31 changes: 30 additions & 1 deletion pydatastructs/trees/tests/test_binary_trees.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from pydatastructs.trees.binary_trees import (
BinarySearchTree, BinaryTreeTraversal, AVLTree,
ArrayForTrees, BinaryIndexedTree)
ArrayForTrees, BinaryIndexedTree, SelfBalancingBinaryTree)
from pydatastructs.utils.raises_util import raises
from pydatastructs.utils.misc_util import TreeNode
from copy import deepcopy
Expand Down Expand Up @@ -319,3 +319,32 @@ def test_BinaryIndexedTree():
assert t.get_sum(0, 2) == 105
assert t.get_sum(0, 4) == 114
assert t.get_sum(1, 9) == 54

def test_issue_234():
"""
https://github.com/codezonediitj/pydatastructs/issues/234
"""
tree = SelfBalancingBinaryTree()
tree.insert(5, 5)
tree.insert(5.5, 5.5)
tree.insert(4.5, 4.5)
tree.insert(4.6, 4.6)
tree.insert(4.4, 4.4)
tree.insert(4.55, 4.55)
tree.insert(4.65, 4.65)
original_tree = str(tree)
tree._right_rotate(3, 5)
assert tree.tree[3].parent == 5
assert tree.tree[2].right != 3
assert tree.tree[tree.tree[5].parent].right == 5
assert str(tree) == ("[(2, 5, 5, 1), (None, 5.5, 5.5, None), "
"(4, 4.5, 4.5, 5), (None, 4.6, 4.6, 6), "
"(None, 4.4, 4.4, None), (None, 4.55, 4.55, 3), "
"(None, 4.65, 4.65, None)]")
assert tree.tree[tree.tree[3].parent].right == 3
tree._left_rotate(5, 3)
assert str(tree) == original_tree
tree.insert(4.54, 4.54)
tree.insert(4.56, 4.56)
tree._left_rotate(5, 8)
assert tree.tree[tree.tree[8].parent].left == 8