1つの二叉木の各層のノードの個数を求めます
4874 ワード
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class Test4 {
public static void main(String[] args) {
/*
A
/ \
B C
/ / \
D E F
\
G
*/
Node A = new Node(null, null, "A");
Node B = new Node(null, null, "B");
Node C = new Node(null, null, "C");
Node D = new Node(null, null, "D");
Node E = new Node(null, null, "E");
Node F = new Node(null, null, "F");
Node G = new Node(null, null, "G");
A.left = B;
A.right = C;
B.left = D;
C.left = E;
C.right = F;
E.right = G;
Map res = getRes(A);
System.out.println(" :" + res.size());
Set> entrySet = res.entrySet();
for (Entry entry : entrySet) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
}
public static Map getRes(Node node){
Map res = new HashMap<>();
LinkedList currQueue = new LinkedList<>();
LinkedList nextQueue = null;
currQueue.addLast(node);
int index = 1;
int count = 1;
res.put(index++, count);
while(!currQueue.isEmpty()){
nextQueue = new LinkedList<>();
count = 0;
while(!currQueue.isEmpty()){
Node n = currQueue.getFirst();
currQueue.removeFirst();
if(n.left != null){
count++;
nextQueue.addLast(n.left);
}
if(n.right != null){
count++;
nextQueue.addLast(n.right);
}
}
if(count > 0){
res.put(index++, count);
}
currQueue = nextQueue;
}
return res;
}
}
class Node{
Node left;
Node right;
String data;
public Node(Node left, Node right, String data) {
super();
this.left = left;
this.right = right;
this.data = data;
}
}