import java.lang.reflect.Array;
import java.util.ArrayDeque;
class Ideone {
public static void main
(String[] args
) { Tree tree = create_tree();
dump_loop(tree);
dump_recursive(tree);
}
static void dump_loop(Tree tree) {
ArrayDeque<Tree> stack = new ArrayDeque<>();
stack.push(tree);
while (stack.size() > 0) {
Tree parent = stack.pop();
System.
out.
println(parent.
value);
for (Tree child : reverse(parent.children)) {
stack.push(child);
}
}
}
@SuppressWarnings("unchecked")
static <T> T[] reverse(T[] src) {
T
[] dest
= (T
[]) Array.
newInstance(src.
getClass().
getComponentType(), src.
length);
for (int low = 0, high = dest.length - 1; low <= high; low++, high--) {
dest[low] = src[high];
dest[high] = src[low];
}
return dest;
}
static void dump_recursive(Tree tree) {
System.
out.
println(tree.
value); dump_sub_recursive(tree.children, 0);
}
static void dump_sub_recursive(Tree[] children, int index) {
if (index < children.length) {
dump_recursive(children[index]);
dump_sub_recursive(children, index + 1);
}
}
static Tree create_tree() {
Tree tree12 = new Tree("12");
Tree tree11 = new Tree("11");
Tree tree10 = new Tree("10");
Tree tree9 = new Tree("9");
Tree tree8 = new Tree("8");
Tree tree7 = new Tree("7");
Tree tree6 = new Tree("6");
Tree tree5 = new Tree("5", tree10, tree11, tree12);
Tree tree4 = new Tree("4");
Tree tree3 = new Tree("3", tree6, tree7, tree8, tree9);
Tree tree2 = new Tree("2", tree4, tree5);
Tree tree1 = new Tree("1", tree2, tree3);
return tree1;
}
static class Tree {
Tree[] children;
Tree
(String value, Tree...
children) { this.value = value;
this.children = children;
}
}
}
aW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkFycmF5OwppbXBvcnQgamF2YS51dGlsLkFycmF5RGVxdWU7CgpjbGFzcyBJZGVvbmUgewoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewoJCVRyZWUgdHJlZSA9IGNyZWF0ZV90cmVlKCk7CgkJCgkJU3lzdGVtLm91dC5wcmludGxuKCLjgovjg7zjgbciKTsKCQlkdW1wX2xvb3AodHJlZSk7CgkJCgkJU3lzdGVtLm91dC5wcmludGxuKCLjgZXjgYTjgY0iKTsKCQlkdW1wX3JlY3Vyc2l2ZSh0cmVlKTsKCX0KCglzdGF0aWMgdm9pZCBkdW1wX2xvb3AoVHJlZSB0cmVlKSB7CgkJQXJyYXlEZXF1ZTxUcmVlPiBzdGFjayA9IG5ldyBBcnJheURlcXVlPD4oKTsKCQlzdGFjay5wdXNoKHRyZWUpOwoKCQl3aGlsZSAoc3RhY2suc2l6ZSgpID4gMCkgewoJCQlUcmVlIHBhcmVudCA9IHN0YWNrLnBvcCgpOwoKCQkJU3lzdGVtLm91dC5wcmludGxuKHBhcmVudC52YWx1ZSk7CgoJCQlmb3IgKFRyZWUgY2hpbGQgOiByZXZlcnNlKHBhcmVudC5jaGlsZHJlbikpIHsKCQkJCXN0YWNrLnB1c2goY2hpbGQpOwoJCQl9CgkJfQoJfQoKCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQoJc3RhdGljIDxUPiBUW10gcmV2ZXJzZShUW10gc3JjKSB7CgkJVFtdIGRlc3QgPSAoVFtdKSBBcnJheS5uZXdJbnN0YW5jZShzcmMuZ2V0Q2xhc3MoKS5nZXRDb21wb25lbnRUeXBlKCksIHNyYy5sZW5ndGgpOwoJCQoJCWZvciAoaW50IGxvdyA9IDAsIGhpZ2ggPSBkZXN0Lmxlbmd0aCAtIDE7IGxvdyA8PSBoaWdoOyBsb3crKywgaGlnaC0tKSB7CgkJCWRlc3RbbG93XSA9IHNyY1toaWdoXTsKCQkJZGVzdFtoaWdoXSA9IHNyY1tsb3ddOwoJCX0KCQkKCQlyZXR1cm4gZGVzdDsKCX0KCQoJc3RhdGljIHZvaWQgZHVtcF9yZWN1cnNpdmUoVHJlZSB0cmVlKSB7CgkJU3lzdGVtLm91dC5wcmludGxuKHRyZWUudmFsdWUpOwoJCWR1bXBfc3ViX3JlY3Vyc2l2ZSh0cmVlLmNoaWxkcmVuLCAwKTsKCX0KCglzdGF0aWMgdm9pZCBkdW1wX3N1Yl9yZWN1cnNpdmUoVHJlZVtdIGNoaWxkcmVuLCBpbnQgaW5kZXgpIHsKCQlpZiAoaW5kZXggPCBjaGlsZHJlbi5sZW5ndGgpIHsKCQkJZHVtcF9yZWN1cnNpdmUoY2hpbGRyZW5baW5kZXhdKTsKCQkJZHVtcF9zdWJfcmVjdXJzaXZlKGNoaWxkcmVuLCBpbmRleCArIDEpOwoJCX0KCX0KCglzdGF0aWMgVHJlZSBjcmVhdGVfdHJlZSgpIHsKCQlUcmVlIHRyZWUxMiA9IG5ldyBUcmVlKCIxMiIpOwoJCVRyZWUgdHJlZTExID0gbmV3IFRyZWUoIjExIik7CgkJVHJlZSB0cmVlMTAgPSBuZXcgVHJlZSgiMTAiKTsKCQlUcmVlIHRyZWU5ID0gbmV3IFRyZWUoIjkiKTsKCQlUcmVlIHRyZWU4ID0gbmV3IFRyZWUoIjgiKTsKCQlUcmVlIHRyZWU3ID0gbmV3IFRyZWUoIjciKTsKCQlUcmVlIHRyZWU2ID0gbmV3IFRyZWUoIjYiKTsKCQlUcmVlIHRyZWU1ID0gbmV3IFRyZWUoIjUiLCB0cmVlMTAsIHRyZWUxMSwgdHJlZTEyKTsKCQlUcmVlIHRyZWU0ID0gbmV3IFRyZWUoIjQiKTsKCQlUcmVlIHRyZWUzID0gbmV3IFRyZWUoIjMiLCB0cmVlNiwgdHJlZTcsIHRyZWU4LCB0cmVlOSk7CgkJVHJlZSB0cmVlMiA9IG5ldyBUcmVlKCIyIiwgdHJlZTQsIHRyZWU1KTsKCQlUcmVlIHRyZWUxID0gbmV3IFRyZWUoIjEiLCB0cmVlMiwgdHJlZTMpOwoJCXJldHVybiB0cmVlMTsKCX0KCglzdGF0aWMgY2xhc3MgVHJlZSB7CgkJU3RyaW5nIHZhbHVlOwoJCVRyZWVbXSBjaGlsZHJlbjsKCgkJVHJlZShTdHJpbmcgdmFsdWUsIFRyZWUuLi4gY2hpbGRyZW4pIHsKCQkJdGhpcy52YWx1ZSA9IHZhbHVlOwoJCQl0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47CgkJfQoJfQp9Cg==