Skip to content

Commit 90b56bc

Browse files
committed
Fix issue trekhleb#37 with AVL tree.
1 parent 924066b commit 90b56bc

File tree

3 files changed

+56
-0
lines changed

3 files changed

+56
-0
lines changed

src/data-structures/tree/avl-tree/AvlTree.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,12 @@ export default class AvlTree extends BinarySearchTree {
8080
const leftRightNode = leftNode.right;
8181
leftNode.setRight(null);
8282

83+
// Preserve leftRightNode's left subtree.
84+
if (leftRightNode.left) {
85+
leftNode.setRight(leftRightNode.left);
86+
leftRightNode.setLeft(null);
87+
}
88+
8389
// Attach leftRightNode to the rootNode.
8490
rootNode.setLeft(leftRightNode);
8591

@@ -102,6 +108,11 @@ export default class AvlTree extends BinarySearchTree {
102108
const rightLeftNode = rightNode.left;
103109
rightNode.setLeft(null);
104110

111+
if (rightLeftNode.right) {
112+
rightNode.setLeft(rightLeftNode.right);
113+
rightLeftNode.setRight(null);
114+
}
115+
105116
// Attach rightLeftNode to the rootNode.
106117
rootNode.setRight(rightLeftNode);
107118

src/data-structures/tree/avl-tree/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,4 @@ AVL tree with balance factors (green)
4545
* [Tutorials Point](https://www.tutorialspoint.com/data_structures_algorithms/avl_tree_algorithm.htm)
4646
* [BTech](http://btechsmartclass.com/DS/U5_T2.html)
4747
* [AVL Tree Insertion on YouTube](https://www.youtube.com/watch?v=rbg7Qf8GkQ4&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8&index=12&)
48+
* [AVL Tree Operations Visualisations](https://www.cs.usfca.edu/~galles/visualization/AVLtree.html)

src/data-structures/tree/avl-tree/__test__/AvlTRee.test.js

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,4 +185,48 @@ describe('AvlTree', () => {
185185
expect(tree.root.height).toBe(2);
186186
expect(tree.toString()).toBe('6,8,9,18,21,22,43');
187187
});
188+
189+
it('should do left right rotation and keeping left right node safe', () => {
190+
const tree = new AvlTree();
191+
192+
tree.insert(30);
193+
tree.insert(15);
194+
tree.insert(40);
195+
tree.insert(10);
196+
tree.insert(18);
197+
tree.insert(35);
198+
tree.insert(45);
199+
tree.insert(5);
200+
tree.insert(12);
201+
202+
expect(tree.toString()).toBe('5,10,12,15,18,30,35,40,45');
203+
expect(tree.root.height).toBe(3);
204+
205+
tree.insert(11);
206+
207+
expect(tree.toString()).toBe('5,10,11,12,15,18,30,35,40,45');
208+
expect(tree.root.height).toBe(3);
209+
});
210+
211+
it('should do left right rotation and keeping left right node safe', () => {
212+
const tree = new AvlTree();
213+
214+
tree.insert(30);
215+
tree.insert(15);
216+
tree.insert(40);
217+
tree.insert(10);
218+
tree.insert(18);
219+
tree.insert(35);
220+
tree.insert(45);
221+
tree.insert(42);
222+
tree.insert(47);
223+
224+
expect(tree.toString()).toBe('10,15,18,30,35,40,42,45,47');
225+
expect(tree.root.height).toBe(3);
226+
227+
tree.insert(43);
228+
229+
expect(tree.toString()).toBe('10,15,18,30,35,40,42,43,45,47');
230+
expect(tree.root.height).toBe(3);
231+
});
188232
});

0 commit comments

Comments
 (0)