一个节点在Prufer编码中出现几次,说明有几个子节点。
不出现说明是叶子节点。
保存各个节点的子节点数count[].
建立一个叶子节点集合leafs。leafs需要保持有序,可以使用java中的TreeSet
算法步骤:
遍历Prufer编码,取出当前值father
取出所有叶子节点leafs中的最小值min,其父亲就是father节点,保存两者关系
count[father]减一,如果count[father]==0,将father加入leafs
leafs.remove(min);
关键代码:
for (Integer father : Prufer) {
Integer min = leafs.first();
ADJ[min].add(father);
ADJ[father].add(min);
leafs.remove(min);
count[father]--;
if (count[father] == 0) {
leafs.add(father);
}
}