import java.util.List;
import java.util.ArrayList;
import java.util.function.Consumer;
class Idiom16
{
static class BinTree<T extends Comparable<T>> {
T value;
BinTree<T> left;
BinTree<T> right;
BinTree(T value) {
this.value = value;
}
@Override
StringBuilder sb = new StringBuilder();
sb.append("(");
sb.append(value);
sb.append(" ");
sb.append(left==null ? "()" : left);
sb.append(right==null ? "()" : right);
sb.append(")");
return sb.toString();
}
void dfs(Consumer<BinTree<T>> f) {
if( left != null )
left.dfs(f);
f.accept(this);
if( right != null )
right.dfs(f);
}
}
public static void main
(String[] args
) {
BinTree<Integer> five = new BinTree<>(5);
BinTree<Integer> one = new BinTree<>(1);
BinTree<Integer> eight = new BinTree<>(8);
BinTree<Integer> six = new BinTree<>(6);
five.left = one;
five.right = eight;
eight.left = six;
Consumer<BinTree<Integer>> finder = new Consumer<BinTree<Integer>>() {
@Override
public void accept(BinTree<Integer> bt) {
System.
out.
println("Found " + bt.
value); }
};
five.dfs(finder);
}
}
aW1wb3J0IGphdmEudXRpbC5MaXN0OwppbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKaW1wb3J0IGphdmEudXRpbC5mdW5jdGlvbi5Db25zdW1lcjsKIApjbGFzcyBJZGlvbTE2CnsKCXN0YXRpYyBjbGFzcyBCaW5UcmVlPFQgZXh0ZW5kcyBDb21wYXJhYmxlPFQ+PiB7CiAgICAgICAgVCB2YWx1ZTsKICAgICAgICBCaW5UcmVlPFQ+IGxlZnQ7CiAgICAgICAgQmluVHJlZTxUPiByaWdodDsKCiAgICAgICAgQmluVHJlZShUIHZhbHVlKSB7CiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKICAgICAgICB9CiAKCQlAT3ZlcnJpZGUKCQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewoJCQlTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKCQkJc2IuYXBwZW5kKCIoIik7CiAgICAgICAgICAgIHNiLmFwcGVuZCh2YWx1ZSk7CgkJCXNiLmFwcGVuZCgiICIpOwogICAgICAgICAgICBzYi5hcHBlbmQobGVmdD09bnVsbCA/ICIoKSIgOiBsZWZ0KTsKICAgICAgICAgICAgc2IuYXBwZW5kKHJpZ2h0PT1udWxsID8gIigpIiA6IHJpZ2h0KTsKCQkJc2IuYXBwZW5kKCIpIik7CgkJCXJldHVybiBzYi50b1N0cmluZygpOwoJCX0KCiAgICAgICAgdm9pZCBkZnMoQ29uc3VtZXI8QmluVHJlZTxUPj4gZikgewogICAgICAgICAgICBpZiggbGVmdCAhPSBudWxsICkKICAgICAgICAgICAgICAgIGxlZnQuZGZzKGYpOwogICAgICAgICAgICBmLmFjY2VwdCh0aGlzKTsKICAgICAgICAgICAgaWYoIHJpZ2h0ICE9IG51bGwgKQogICAgICAgICAgICAgICAgcmlnaHQuZGZzKGYpOwogICAgICAgIH0KCX0KIAoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpCgl7CiAgICAgICAgQmluVHJlZTxJbnRlZ2VyPiBmaXZlID0gbmV3IEJpblRyZWU8Pig1KTsKICAgICAgICBCaW5UcmVlPEludGVnZXI+IG9uZSA9IG5ldyBCaW5UcmVlPD4oMSk7CiAgICAgICAgQmluVHJlZTxJbnRlZ2VyPiBlaWdodCA9IG5ldyBCaW5UcmVlPD4oOCk7CgkJQmluVHJlZTxJbnRlZ2VyPiBzaXggPSBuZXcgQmluVHJlZTw+KDYpOwogICAgICAgIGZpdmUubGVmdCA9IG9uZTsKICAgICAgICBmaXZlLnJpZ2h0ID0gZWlnaHQ7CiAgICAgICAgZWlnaHQubGVmdCA9IHNpeDsKCiAgICAgICAgQ29uc3VtZXI8QmluVHJlZTxJbnRlZ2VyPj4gZmluZGVyID0gbmV3IENvbnN1bWVyPEJpblRyZWU8SW50ZWdlcj4+KCkgewogICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgcHVibGljIHZvaWQgYWNjZXB0KEJpblRyZWU8SW50ZWdlcj4gYnQpIHsKICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRm91bmQgIiArIGJ0LnZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgZml2ZS5kZnMoZmluZGVyKTsKCX0KfQ==