From c3a961840d82868d51165a6b023b30b66cf46547 Mon Sep 17 00:00:00 2001 From: Oleksii Trekhleb Date: Wed, 13 Jun 2018 06:39:18 +0300 Subject: [PATCH] Fix BST removal method. --- src/data-structures/tree/avl-tree/AvlTree.js | 8 ++++++++ .../tree/avl-tree/__test__/AvlTRee.test.js | 10 ++++++++++ .../tree/binary-search-tree/BinarySearchTree.js | 2 +- .../tree/binary-search-tree/BinarySearchTreeNode.js | 4 ++-- .../__test__/BinarySearchTree.test.js | 8 ++++---- .../__test__/BinarySearchTreeNode.test.js | 8 ++++---- .../tree/red-black-tree/RedBlackTree.js | 2 +- 7 files changed, 30 insertions(+), 12 deletions(-) diff --git a/src/data-structures/tree/avl-tree/AvlTree.js b/src/data-structures/tree/avl-tree/AvlTree.js index b4b86ea4..51e6a05f 100644 --- a/src/data-structures/tree/avl-tree/AvlTree.js +++ b/src/data-structures/tree/avl-tree/AvlTree.js @@ -16,6 +16,14 @@ export default class AvlTree extends BinarySearchTree { } } + /** + * @param {*} value + * @return {boolean} + */ + remove(value) { + throw new Error(`Can't remove ${value}. Remove method is not implemented yet`); + } + /** * @param {BinarySearchTreeNode} node */ diff --git a/src/data-structures/tree/avl-tree/__test__/AvlTRee.test.js b/src/data-structures/tree/avl-tree/__test__/AvlTRee.test.js index 5be7d119..fb1f3ee4 100644 --- a/src/data-structures/tree/avl-tree/__test__/AvlTRee.test.js +++ b/src/data-structures/tree/avl-tree/__test__/AvlTRee.test.js @@ -229,4 +229,14 @@ describe('AvlTree', () => { expect(tree.toString()).toBe('10,15,18,30,35,40,42,43,45,47'); expect(tree.root.height).toBe(3); }); + + it('should throw an error when trying to remove the node', () => { + const removeNodeAvlTree = () => { + const tree = new AvlTree(); + + tree.remove(1); + }; + + expect(removeNodeAvlTree).toThrowError(); + }); }); diff --git a/src/data-structures/tree/binary-search-tree/BinarySearchTree.js b/src/data-structures/tree/binary-search-tree/BinarySearchTree.js index e70950f9..b9e2ddad 100644 --- a/src/data-structures/tree/binary-search-tree/BinarySearchTree.js +++ b/src/data-structures/tree/binary-search-tree/BinarySearchTree.js @@ -29,7 +29,7 @@ export default class BinarySearchTree { /** * @param {*} value - * @return {BinarySearchTreeNode} + * @return {boolean} */ remove(value) { return this.root.remove(value); diff --git a/src/data-structures/tree/binary-search-tree/BinarySearchTreeNode.js b/src/data-structures/tree/binary-search-tree/BinarySearchTreeNode.js index d6fe4bae..9ad74483 100644 --- a/src/data-structures/tree/binary-search-tree/BinarySearchTreeNode.js +++ b/src/data-structures/tree/binary-search-tree/BinarySearchTreeNode.js @@ -81,7 +81,7 @@ export default class BinarySearchTreeNode extends BinaryTreeNode { /** * @param {*} value - * @return {BinarySearchTreeNode} + * @return {boolean} */ remove(value) { const nodeToRemove = this.find(value); @@ -120,7 +120,7 @@ export default class BinarySearchTreeNode extends BinaryTreeNode { } } - return nodeToRemove; + return true; } /** diff --git a/src/data-structures/tree/binary-search-tree/__test__/BinarySearchTree.test.js b/src/data-structures/tree/binary-search-tree/__test__/BinarySearchTree.test.js index 593014d8..981a118d 100644 --- a/src/data-structures/tree/binary-search-tree/__test__/BinarySearchTree.test.js +++ b/src/data-structures/tree/binary-search-tree/__test__/BinarySearchTree.test.js @@ -43,13 +43,13 @@ describe('BinarySearchTree', () => { expect(bst.toString()).toBe('5,10,20'); - const removedNode1 = bst.remove(5); + const removed1 = bst.remove(5); expect(bst.toString()).toBe('10,20'); - expect(removedNode1.value).toBe(5); + expect(removed1).toBeTruthy(); - const removedNode2 = bst.remove(20); + const removed2 = bst.remove(20); expect(bst.toString()).toBe('10'); - expect(removedNode2.value).toBe(20); + expect(removed2).toBeTruthy(); }); it('should insert object values', () => { diff --git a/src/data-structures/tree/binary-search-tree/__test__/BinarySearchTreeNode.test.js b/src/data-structures/tree/binary-search-tree/__test__/BinarySearchTreeNode.test.js index 35a7fc53..a353c1f1 100644 --- a/src/data-structures/tree/binary-search-tree/__test__/BinarySearchTreeNode.test.js +++ b/src/data-structures/tree/binary-search-tree/__test__/BinarySearchTreeNode.test.js @@ -125,13 +125,13 @@ describe('BinarySearchTreeNode', () => { expect(bstRootNode.toString()).toBe('5,10,20'); - const removedNode1 = bstRootNode.remove(5); + const removed1 = bstRootNode.remove(5); expect(bstRootNode.toString()).toBe('10,20'); - expect(removedNode1.value).toBe(5); + expect(removed1).toBeTruthy(); - const removedNode2 = bstRootNode.remove(20); + const removed2 = bstRootNode.remove(20); expect(bstRootNode.toString()).toBe('10'); - expect(removedNode2.value).toBe(20); + expect(removed2).toBeTruthy(); }); it('should remove nodes with one child', () => { diff --git a/src/data-structures/tree/red-black-tree/RedBlackTree.js b/src/data-structures/tree/red-black-tree/RedBlackTree.js index 2bd3afd4..6bb47130 100644 --- a/src/data-structures/tree/red-black-tree/RedBlackTree.js +++ b/src/data-structures/tree/red-black-tree/RedBlackTree.js @@ -34,7 +34,7 @@ export default class RedBlackTree extends BinarySearchTree { /** * @param {*} value - * @return {BinarySearchTreeNode} + * @return {boolean} */ remove(value) { throw new Error(`Can't remove ${value}. Remove method is not implemented yet`);