99import java .util .stream .Collectors ;
1010
1111/**
12+ * <pre>
1213 * Дано бинарное дерево с выделенным корнем, в каждой вершине которого записано по одной букве A-Z.
13- * Две вершины считаются эквивалентными, если поддеревья этих вершин содержат одинаковое множество (т.е. без учета частот) букв.
14+ * Две вершины считаются эквивалентными, если поддеревья этих вершин содержат одинаковое множество
15+ * (т.е. без учета частот) букв.
1416 * Нужно найти две эквивалентные вершины с максимальным суммарным размером поддеревьев.
15- * <pre>
17+ *
1618 * public class Node {
1719 * char value; // [A-Z]
1820 * Node left;
@@ -38,10 +40,9 @@ public List<Node> findEquivalentSubtrees(Node root) {
3840 // Build Set<Character> -> List<Node> map
3941 Map <Set <Character >, List <Node >> voc2Nodes = new HashMap <>();
4042 node2Voc = node2Voc .entrySet ().stream ()
41- // .filter(nodeSetEntry -> !nodeSetEntry.getValue().isEmpty())
4243 .collect (Collectors .toMap (
43- entry -> entry . getKey () ,
44- entry -> entry . getValue ()
44+ Map . Entry :: getKey ,
45+ Map . Entry :: getValue
4546 ));
4647
4748 for (Node node : node2Voc .keySet ()) {
@@ -57,7 +58,7 @@ public List<Node> findEquivalentSubtrees(Node root) {
5758 voc2Nodes = voc2Nodes .entrySet ().stream ()
5859 .filter (entry -> entry .getValue ().size () >= 2 )
5960 .collect (Collectors .toMap (
60- entry -> entry . getKey () ,
61+ Map . Entry :: getKey ,
6162 entry -> entry .getValue ().stream ()
6263 .sorted ((o1 , o2 ) -> node2Size .get (o2 ) - node2Size .get (o1 ))
6364 .limit (2 )
@@ -73,16 +74,16 @@ public List<Node> findEquivalentSubtrees(Node root) {
7374 .sorted ((o1 , o2 ) -> o2 .getValue ().stream ().mapToInt (node2Size ::get ).sum () - o1 .getValue ().stream ().mapToInt (node2Size ::get ).sum ())
7475 .limit (1 )
7576 .collect (Collectors .toMap (
76- entry -> entry . getKey () ,
77- entry -> entry . getValue ()
77+ Map . Entry :: getKey ,
78+ Map . Entry :: getValue
7879 ));
7980
80- return ( List < Node >) map .values ().toArray ()[ 0 ] ;
81+ return map .values ().iterator (). next () ;
8182 }
8283
8384 private Set <Character > buildNodeVocabulary (Node node , Map <Node , Set <Character >> node2Voc ) {
8485 if (!node2Voc .containsKey (node )) {
85- node2Voc .put (node , new HashSet ());
86+ node2Voc .put (node , new HashSet <> ());
8687 }
8788 if (node .left != null ) {
8889 node2Voc .get (node ).add (node .left .value );
0 commit comments