import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
class Ideone {
public static void main
(String[] args
) { Node root = new Node(8,
new Node(4,
new Node(1),
new Node(4),
new Node(3)),
new Node(3,
new Node(3),
new Node(5),
new Node(6),
new Node(4)
),
new Node(7,
new Node(12),
new Node(32),
new Node(3),
new Node(1)));
System.
out.
println(getMaxValuePerLevel
(root
)); }
public static List<Integer> getMaxValuePerLevel(Node node) {
final ArrayList
<Integer
> maxPerLevel
= new ArrayList(); maxPerLevel.add(node.getValue());
List<Node> children = node.getChildren();
while (!children.isEmpty()) {
maxPerLevel.add(children.stream()
.mapToInt(Node::getValue)
.max()
.getAsInt());
children = children.stream()
.map(Node::getChildren)
.collect(Collectors.toList());
}
return maxPerLevel;
}
}
class Node {
private final int value;
private final List<Node> children;
public Node(int value, Node... children) {
this.value = value;
this.
children = List.
of(children
).
stream() .filter(Objects::nonNull)
.collect(Collectors.toUnmodifiableList());
}
public int getValue() {
return value;
}
public List<Node> getChildren() {
return children;
}
}
aW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuTGlzdDsKaW1wb3J0IGphdmEudXRpbC5PYmplY3RzOwppbXBvcnQgamF2YS51dGlsLnN0cmVhbS5Db2xsZWN0b3JzOwoKY2xhc3MgSWRlb25lIHsKCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogICAgICAgIE5vZGUgcm9vdCA9IG5ldyBOb2RlKDgsCiAgICAgICAgICAgICAgICBuZXcgTm9kZSg0LAogICAgICAgICAgICAgICAgICAgICAgICBuZXcgTm9kZSgxKSwKICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE5vZGUoNCksCiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBOb2RlKDMpKSwKICAgICAgICAgICAgICAgIG5ldyBOb2RlKDMsCiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBOb2RlKDMpLAogICAgICAgICAgICAgICAgICAgICAgICBuZXcgTm9kZSg1KSwKICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE5vZGUoNiksCiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBOb2RlKDQpCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgbmV3IE5vZGUoNywKICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE5vZGUoMTIpLAogICAgICAgICAgICAgICAgICAgICAgICBuZXcgTm9kZSgzMiksCiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBOb2RlKDMpLAogICAgICAgICAgICAgICAgICAgICAgICBuZXcgTm9kZSgxKSkpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihnZXRNYXhWYWx1ZVBlckxldmVsKHJvb3QpKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIExpc3Q8SW50ZWdlcj4gZ2V0TWF4VmFsdWVQZXJMZXZlbChOb2RlIG5vZGUpIHsKICAgICAgICBmaW5hbCBBcnJheUxpc3Q8SW50ZWdlcj4gbWF4UGVyTGV2ZWwgPSBuZXcgQXJyYXlMaXN0KCk7CiAgICAgICAgbWF4UGVyTGV2ZWwuYWRkKG5vZGUuZ2V0VmFsdWUoKSk7CiAgICAgICAgTGlzdDxOb2RlPiBjaGlsZHJlbiA9IG5vZGUuZ2V0Q2hpbGRyZW4oKTsKICAgICAgICB3aGlsZSAoIWNoaWxkcmVuLmlzRW1wdHkoKSkgewogICAgICAgICAgICBtYXhQZXJMZXZlbC5hZGQoY2hpbGRyZW4uc3RyZWFtKCkKICAgICAgICAgICAgICAgICAgICAubWFwVG9JbnQoTm9kZTo6Z2V0VmFsdWUpCiAgICAgICAgICAgICAgICAgICAgLm1heCgpCiAgICAgICAgICAgICAgICAgICAgLmdldEFzSW50KCkpOwogICAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLnN0cmVhbSgpCiAgICAgICAgICAgICAgICAgICAgLm1hcChOb2RlOjpnZXRDaGlsZHJlbikKICAgICAgICAgICAgICAgICAgICAuZmxhdE1hcChMaXN0OjpzdHJlYW0pCiAgICAgICAgICAgICAgICAgICAgLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBtYXhQZXJMZXZlbDsKICAgIH0KfQoKY2xhc3MgTm9kZSB7CiAgICBwcml2YXRlIGZpbmFsIGludCB2YWx1ZTsKICAgIHByaXZhdGUgZmluYWwgTGlzdDxOb2RlPiBjaGlsZHJlbjsKCiAgICBwdWJsaWMgTm9kZShpbnQgdmFsdWUsIE5vZGUuLi4gY2hpbGRyZW4pIHsKICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7CiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IExpc3Qub2YoY2hpbGRyZW4pLnN0cmVhbSgpCiAgICAgICAgICAgICAgICAuZmlsdGVyKE9iamVjdHM6Om5vbk51bGwpCiAgICAgICAgICAgICAgICAuY29sbGVjdChDb2xsZWN0b3JzLnRvVW5tb2RpZmlhYmxlTGlzdCgpKTsKICAgIH0KCiAgICBwdWJsaWMgaW50IGdldFZhbHVlKCkgewogICAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0KCiAgICBwdWJsaWMgTGlzdDxOb2RlPiBnZXRDaGlsZHJlbigpIHsKICAgICAgICByZXR1cm4gY2hpbGRyZW47CiAgICB9Cn0=