import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
class Scratch {
public static void main
(String[] args
) { Node
<Integer
> root
= new Node
<>(8,
List.
of( new Node<>(1),
new Node<>(4),
new Node<>(3))),
new Node<>(3),
new Node<>(5),
new Node<>(6),
new Node<>(4))),
new Node<>(12),
new Node<>(32),
new Node<>(3),
new Node<>(1)))));
System.
out.
println(getMaxValuePerLevel
(root
)); }
public static <T extends Comparable<T>> List<T> getMaxValuePerLevel(Node<T> node) {
final ArrayList<T> maxPerLevel = new ArrayList<>();
maxPerLevel.add(node.getValue());
List<Node<T>> children = node.getChildren();
while (!children.isEmpty()) {
final Node<T> defaultNode = children.get(0);
maxPerLevel.add(children.stream()
.map(Node::getValue)
.orElseGet(defaultNode::getValue));
children = children.stream()
.map(Node::getChildren)
.collect(Collectors.toList());
}
return maxPerLevel;
}
}
class Node<T extends Comparable<T>> {
private final T value;
private final List<Node<T>> children;
public Node(T value) {
}
public Node(T value, List<Node<T>> children) {
this.value = Objects.requireNonNull(value);
this.children = Objects.requireNonNull(children).stream()
.filter(Objects::nonNull)
.collect(Collectors.toUnmodifiableList());
}
public T getValue() {
return value;
}
public List<Node<T>> getChildren() {
return children;
}
}
aW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CmltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKaW1wb3J0IGphdmEudXRpbC5MaXN0OwppbXBvcnQgamF2YS51dGlsLk9iamVjdHM7CmltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLkNvbGxlY3RvcnM7CgpjbGFzcyBTY3JhdGNoIHsKCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgTm9kZTxJbnRlZ2VyPiByb290ID0gbmV3IE5vZGU8Pig4LCBMaXN0Lm9mKAogICAgICAgICAgICAgICAgbmV3IE5vZGU8Pig0LCBMaXN0Lm9mKAogICAgICAgICAgICAgICAgICAgICAgICBuZXcgTm9kZTw+KDEpLAogICAgICAgICAgICAgICAgICAgICAgICBuZXcgTm9kZTw+KDQpLAogICAgICAgICAgICAgICAgICAgICAgICBuZXcgTm9kZTw+KDMpKSksCiAgICAgICAgICAgICAgICBuZXcgTm9kZTw+KDMsIExpc3Qub2YoCiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBOb2RlPD4oMyksCiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBOb2RlPD4oNSksCiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBOb2RlPD4oNiksCiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBOb2RlPD4oNCkpKSwKICAgICAgICAgICAgICAgIG5ldyBOb2RlPD4oNywgTGlzdC5vZigKICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE5vZGU8PigxMiksCiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBOb2RlPD4oMzIpLAogICAgICAgICAgICAgICAgICAgICAgICBuZXcgTm9kZTw+KDMpLAogICAgICAgICAgICAgICAgICAgICAgICBuZXcgTm9kZTw+KDEpKSkpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0TWF4VmFsdWVQZXJMZXZlbChyb290KSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyA8VCBleHRlbmRzIENvbXBhcmFibGU8VD4+IExpc3Q8VD4gZ2V0TWF4VmFsdWVQZXJMZXZlbChOb2RlPFQ+IG5vZGUpIHsKICAgICAgICBmaW5hbCBBcnJheUxpc3Q8VD4gbWF4UGVyTGV2ZWwgPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICAgICBtYXhQZXJMZXZlbC5hZGQobm9kZS5nZXRWYWx1ZSgpKTsKICAgICAgICBMaXN0PE5vZGU8VD4+IGNoaWxkcmVuID0gbm9kZS5nZXRDaGlsZHJlbigpOwogICAgICAgIHdoaWxlICghY2hpbGRyZW4uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIGZpbmFsIE5vZGU8VD4gZGVmYXVsdE5vZGUgPSBjaGlsZHJlbi5nZXQoMCk7CiAgICAgICAgICAgIG1heFBlckxldmVsLmFkZChjaGlsZHJlbi5zdHJlYW0oKQogICAgICAgICAgICAgICAgICAgIC5tYXAoTm9kZTo6Z2V0VmFsdWUpCiAgICAgICAgICAgICAgICAgICAgLm1heChDb21wYXJhdG9yLm5hdHVyYWxPcmRlcigpKQogICAgICAgICAgICAgICAgICAgIC5vckVsc2VHZXQoZGVmYXVsdE5vZGU6OmdldFZhbHVlKSk7CiAgICAgICAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW4uc3RyZWFtKCkKICAgICAgICAgICAgICAgICAgICAubWFwKE5vZGU6OmdldENoaWxkcmVuKQogICAgICAgICAgICAgICAgICAgIC5mbGF0TWFwKExpc3Q6OnN0cmVhbSkKICAgICAgICAgICAgICAgICAgICAuY29sbGVjdChDb2xsZWN0b3JzLnRvTGlzdCgpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG1heFBlckxldmVsOwogICAgfQp9CgpjbGFzcyBOb2RlPFQgZXh0ZW5kcyBDb21wYXJhYmxlPFQ+PiB7CiAgICBwcml2YXRlIGZpbmFsIFQgdmFsdWU7CiAgICBwcml2YXRlIGZpbmFsIExpc3Q8Tm9kZTxUPj4gY2hpbGRyZW47CgogICAgcHVibGljIE5vZGUoVCB2YWx1ZSkgewogICAgICAgIHRoaXModmFsdWUsIENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpKTsKICAgIH0KCiAgICBwdWJsaWMgTm9kZShUIHZhbHVlLCBMaXN0PE5vZGU8VD4+IGNoaWxkcmVuKSB7CiAgICAgICAgdGhpcy52YWx1ZSA9IE9iamVjdHMucmVxdWlyZU5vbk51bGwodmFsdWUpOwogICAgICAgIHRoaXMuY2hpbGRyZW4gPSBPYmplY3RzLnJlcXVpcmVOb25OdWxsKGNoaWxkcmVuKS5zdHJlYW0oKQogICAgICAgICAgICAgICAgLmZpbHRlcihPYmplY3RzOjpub25OdWxsKQogICAgICAgICAgICAgICAgLmNvbGxlY3QoQ29sbGVjdG9ycy50b1VubW9kaWZpYWJsZUxpc3QoKSk7CiAgICB9CgogICAgcHVibGljIFQgZ2V0VmFsdWUoKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgfQoKICAgIHB1YmxpYyBMaXN0PE5vZGU8VD4+IGdldENoaWxkcmVuKCkgewogICAgICAgIHJldHVybiBjaGlsZHJlbjsKICAgIH0KfQ==