diff --git a/Trees/DepthFirstSearch.js b/Trees/DepthFirstSearch.js index 0833d9d1de..4c0c43db41 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's value +function traverseDFS (tree, rootValue) { + const stack = [] const res = [] - + stack.push(searchDFS(tree, rootValue)) + // 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]) + }) +}) pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy