-
Notifications
You must be signed in to change notification settings - Fork 80
Expand file tree
/
Copy pathdepthFirstSearch.js
More file actions
32 lines (23 loc) · 986 Bytes
/
depthFirstSearch.js
File metadata and controls
32 lines (23 loc) · 986 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function initCallbacks(callbacks = {}) {
const initiatedCallbacks = {};
const stubCallback = () => {};
const defaultAllowTraversalCallback = () => true;
initiatedCallbacks.allowTraversal = callbacks.allowTraversal || defaultAllowTraversalCallback;
initiatedCallbacks.enterNode = callbacks.enterNode || stubCallback;
initiatedCallbacks.leaveNode = callbacks.leaveNode || stubCallback;
return initiatedCallbacks;
}
export function depthFirstSearchRecursive(node, callbacks) {
callbacks.enterNode(node);
if (node.left && callbacks.allowTraversal(node, node.left)) {
depthFirstSearchRecursive(node.left, callbacks);
}
if (node.right && callbacks.allowTraversal(node, node.right)) {
depthFirstSearchRecursive(node.right, callbacks);
}
callbacks.leaveNode(node);
}
export default function depthFirstSearch(rootNode, callbacks) {
const processedCallbacks = initCallbacks(callbacks);
depthFirstSearchRecursive(rootNode, processedCallbacks);
}