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]);