West Hollywood, LA
I recently revisited the DFS tree traversal and decided to summarize what I relearnt
Algorithm
Algorithmically, DFS (on a Binary Tree) can be expressed as a simple recursive function -
- traverse(node)
 - traverse(node.left)
 - process(node)
 - traverse(node.right)
 
The order of the steps within the function changes depending on the flavor of the DFS used - 
- In order
 - Pre order
 - Post order
 
Depth First
The name of the algorithm is a little confusing, however here are my main takeaways -
- DFS does not stipulate that we start with the deepest leaf node.
 - We process nodes with a bias towards processing the deeper nodes
 - The general direction is from left of the tree towards the right of the tree.
 
Inorder
Preorder
A non recursive method
The recursive solution is easy to understand and remember, however in an alternative solution it is also possible to utilize a stack to keep track of nodes that need to be processed.
The general idea -
- Traverse all the left nodes whilst saving the nodes in a stack
 - When you reach the end (null), process the top of the stack.
 - This should be the left most node in the traversal
 - Now repeat this process with the right node of the just processed node
 
Here is part of the source for an in order traversal from https://www.geeksforgeeks.org/inorder-tree-traversal-without-recursion/
// traverse the tree
while (curr != null || s.size() > 0)
{
    /* Reach the left most Node of the
    curr Node */
    while (curr !=  null)
    {
        /* place pointer to a tree node on
           the stack before traversing
          the node's left subtree */
        s.push(curr);
        curr = curr.left;
    }
    /* Current must be NULL at this point */
    curr = s.pop();
    System.out.print(curr.data + " ");
    /* we have visited the node and its
       left subtree.  Now, it's right
       subtree's turn */
    curr = curr.right; }






