Assuming the selector gives the child nodes, your second method is the first "first first step forward." That is, if you have
A / \ BC / \ / \ DEFG
Then you get A, C, G, F, B, E, D. You get โGโ to โBโ because โdepth firstโ goes as deep as possible before it tries to use another branch. In your specific example, you will get C to B because it determines the priorities from right to left.
If you changed it to
foreach (var item in items.Reverse())
then you will get around the first or first depth, as most people think about the first passage of depth.
If you changed the stack to a queue, then it will become a "workaround". A, B, C, D, E, F, G. You complete the whole โlevelโ at a time.
There are other passages. Note that depth and width searches first have the property that the parent nodes belong to child nodes. You can also have "post-order" traversals in which each node appears after its children.
Binary trees also have "in order" traversal. The transverse course of this tree is D, B, E, A, F, C, G. That is, every left child meets all his ancestors, and every right child comes after all his ancestors. As an exercise, can you write a traversal in order on a binary tree?