function traverse(el) {
  var stack = [el];
  var current;
  
  while (stack.length > 0) {
    current = stack.pop();
    var len = current.children.length;
    for (var i=0; i < len; i++) {
      stack.push(current.children[len-1-i]);
    }
    
    alert(current);
  }
}
traverse(document.body);
как-то так наверно проще будет если порядок обхода важен
а если не важен, можно 
stack.push(current.children[i]);
 вместо 
stack.push(current.children[len-1-i]);