diff --git a/src/data-structures/trie/TrieNode.js b/src/data-structures/trie/TrieNode.js index c7b67558..f6507437 100644 --- a/src/data-structures/trie/TrieNode.js +++ b/src/data-structures/trie/TrieNode.js @@ -42,20 +42,16 @@ export default class TrieNode { * @return {TrieNode} */ removeChild(character) { - function isSafeToDelete(node) { - return ( - node - && !node.isCompleteWord - && node.children.getKeys().length === 0 - ); - } - const childNode = this.getChild(character); - // delete childNode only if: - // - childNode has NO children - // - childNode.isCompleteWord === false - if (isSafeToDelete(childNode)) { + // Delete childNode only if: + // - childNode has NO children, + // - childNode.isCompleteWord === false. + if ( + childNode + && !childNode.isCompleteWord + && !childNode.hasChildren() + ) { this.children.delete(character); } @@ -70,6 +66,14 @@ export default class TrieNode { return this.children.has(character); } + /** + * Check whether current TrieNode has children or not. + * @return {boolean} + */ + hasChildren() { + return this.children.getKeys().length !== 0; + } + /** * @return {string[]} */ diff --git a/src/data-structures/trie/__test__/TrieNode.test.js b/src/data-structures/trie/__test__/TrieNode.test.js index ddcd47d2..c12c0113 100644 --- a/src/data-structures/trie/__test__/TrieNode.test.js +++ b/src/data-structures/trie/__test__/TrieNode.test.js @@ -30,6 +30,16 @@ describe('TrieNode', () => { expect(trieNode.getChild('b')).toBeUndefined(); }); + it('should check if node has children', () => { + const trieNode = new TrieNode('c'); + + expect(trieNode.hasChildren()).toBe(false); + + trieNode.addChild('a'); + + expect(trieNode.hasChildren()).toBe(true); + }); + it('should check if node has specific child', () => { const trieNode = new TrieNode('c');