Can anybody give a link for a simple explanation on BFS and DFS with its implementation?
Lets say you are given the following structure:
Format: Node [Children] A [B C D] B [E F] C [G] D [] E [] F [] G []
A breadth first search visits all of a node's children before visiting their children. Here's the pseudocode and the solution for the above structure:
1. Enqueue root node. 2. Dequeue and output. If the queue is empty, go to step 5. 3. Enqueue the dequeued node's children. 4. Go to Step 2. 5. Done
Two queues: (Active Node) [Output] [Working Set] Starting with root: ( ) [] [A] (A) [A] [B C D] (B) [A B] [C D E F] (C) [A B C] [D E F G] (D) [A B C D] [E F G] (E) [A B C D E] [F G] (F) [A B C D E F] [G] (G) [A B C D E F G] [] Done
A depth first search visits the lowest level (deepest children) of the tree first instead. There are two types of depth first search: pre-order and post-order. This just differentiates between when you add the node to the output (when you visit it vs leave it).
var rootNode = structure.getRoot();
var preOrder = new Array();
var postOrder = new Array();
function DepthFirst( rootNode ){
// Pre-order
preOrder[ preOrder.length ] = rootNode;
for( var child in rootNode ){
DepthFirst( child );
}
// Post-order
postOrder[ postOrder.length ] = rootNode;
}
Pre-order: * A B E F C G D Post-order: * E F B G C D A