From 0015de616b60f4a915752fe6f8fb5d38fd44de28 Mon Sep 17 00:00:00 2001 From: Ranganathan S V Date: Mon, 27 Feb 2023 11:01:18 +0530 Subject: [PATCH 1/2] fix: fixed error in DepthFirstSearch algorithm and test: added tests for DepthFirstSearch algorithm. --- Trees/DepthFirstSearch.js | 35 ++++++++++------------ Trees/test/DepthFirstSearch.test.js | 46 +++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 19 deletions(-) create mode 100644 Trees/test/DepthFirstSearch.test.js diff --git a/Trees/DepthFirstSearch.js b/Trees/DepthFirstSearch.js index 0833d9d1de..b436704368 100644 --- a/Trees/DepthFirstSearch.js +++ b/Trees/DepthFirstSearch.js @@ -4,35 +4,32 @@ * DFS Algorithm for traversing or searching graph data structures. */ -function traverseDFS (root) { - const stack = [root] +// traverses a give tree from specified root +function traverseDFS (tree, root) { + const stack = [] const res = [] - + stack.push(searchDFS(tree, root)) + // if root is not present in the tree, returning empty array + if (!stack[0]) return res while (stack.length) { const curr = stack.pop() - res.push(curr.key) - - if (curr.right) { - stack.push(curr.right) - } - + res.push(curr.value) if (curr.left) { - stack.push(curr.left) + stack.push(tree[curr.left]) + } + if (curr.right) { + stack.push(tree[curr.right]) } } - return res.reverse() } function searchDFS (tree, value) { const stack = [] - stack.push(tree[0]) - while (stack.length !== 0) { for (let i = 0; i < stack.length; i++) { const node = stack.pop() - if (node.value === value) { return node } @@ -59,11 +56,10 @@ const tree = [ { value: 10, left: null, right: null }, { value: 1, left: null, right: null } ] - -searchDFS(tree, 9) -searchDFS(tree, 10) - -traverseDFS(6) +searchDFS(tree, 9) // { value: 9, left: 7, right: 8 } +searchDFS(tree, 200) // null +traverseDFS(tree, 6) // [ 1, 2, 3, 4, 5, 8, 10, 9, 7, 6 ] +traverseDFS(tree, 200) // [] // 6 // / \ @@ -74,3 +70,4 @@ traverseDFS(6) // 2 8 10 // / // 1 +export { searchDFS, traverseDFS } diff --git a/Trees/test/DepthFirstSearch.test.js b/Trees/test/DepthFirstSearch.test.js new file mode 100644 index 0000000000..6c76fbb3d6 --- /dev/null +++ b/Trees/test/DepthFirstSearch.test.js @@ -0,0 +1,46 @@ +import { searchDFS, traverseDFS } from '../DepthFirstSearch' + +describe('Depth First Tree Traversal', () => { + const tree = [ + { value: 6, left: 1, right: 2 }, + { value: 5, left: 3, right: 4 }, + { value: 7, left: null, right: 5 }, + { value: 3, left: 6, right: null }, + { value: 4, left: null, right: null }, + { value: 9, left: 7, right: 8 }, + { value: 2, left: 9, right: null }, + { value: 8, left: null, right: null }, + { value: 10, left: null, right: null }, + { value: 1, left: null, right: null } + ] + + // 6 + // / \ + // 5 7 + // / \ \ + // 3 4 9 + // / / \ + // 2 8 10 + // / + // 1 + + it('should be null if given value is not present in the tree - DF Search', () => { + const res = searchDFS(tree, 200) + expect(res).toStrictEqual(null) + }) + + it('should return the node if given value is present in the tree - DF Search', () => { + const res = searchDFS(tree, 9) + expect(res).toStrictEqual({ value: 9, left: 7, right: 8 }) + }) + + it('should return empty array if given root is not present in the tree - DF Traversal', () => { + const traversal = traverseDFS(tree, 200) + expect(traversal).toStrictEqual([]) + }) + + it('should return DFT array of given tree from specified root if given root is present in the tree - DF Traversal', () => { + const traversal = traverseDFS(tree, 6) + expect(traversal).toStrictEqual([1, 2, 3, 4, 5, 8, 10, 9, 7, 6]) + }) +}) From 7cd3870b11d33bc7a731180fdceb79190c052e2d Mon Sep 17 00:00:00 2001 From: Ranganathan S V Date: Tue, 28 Feb 2023 16:14:16 +0530 Subject: [PATCH 2/2] changed traverseDFS function parameters in DepthFirstSearch.js file --- Trees/DepthFirstSearch.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Trees/DepthFirstSearch.js b/Trees/DepthFirstSearch.js index b436704368..4c0c43db41 100644 --- a/Trees/DepthFirstSearch.js +++ b/Trees/DepthFirstSearch.js @@ -4,11 +4,11 @@ * DFS Algorithm for traversing or searching graph data structures. */ -// traverses a give tree from specified root -function traverseDFS (tree, root) { +// traverses a give tree from specified root's value +function traverseDFS (tree, rootValue) { const stack = [] const res = [] - stack.push(searchDFS(tree, root)) + stack.push(searchDFS(tree, rootValue)) // if root is not present in the tree, returning empty array if (!stack[0]) return res while (stack.length) {