目录
方法一:HashMap
public static int f(TreeNode head){
if(head==null){
return 0;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(head);
HashMap<TreeNode,Integer> levelmap = new HashMap<>();
levelmap.put(head,1);
int curlevel = 1;
int curlevelNodes = 0;
int max = Integer.MIN_VALUE;
while(!queue.isEmpty()){
TreeNode cur = queue.poll();
int curNodelevel = levelmap.get(cur);
if(curlevel==curNodelevel){
curlevelNodes++;
}else{
max = Math.max(max,curlevelNodes);
curlevel++;
curlevelNodes = 1;
}
if(cur.left!=null){
levelmap.put(cur.left,curNodelevel+1);
queue.add(cur.left);
}
if(cur.right!=null){
levelmap.put(cur.right,curNodelevel+1);
queue.add(cur.right);
}
}
return curlevelNodes;
}
方法二:使用有限个变量
public static int f(TreeNode head){
if(head==null){
return 0;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(head);
TreeNode curend = head; // 当前层的最后一个结点
TreeNode nextend = null; // 下一层的最后一个结点
int curlevelNodes = 0; // 当前层的结点个数
int max = Integer.MIN_VALUE;
while(!queue.isEmpty()){
TreeNode cur = queue.poll();
if(cur.left!=null){
queue.add(cur.left);
nextend = cur.left;
}
if(cur.right!=null){
queue.add(cur.right);
nextend = cur.right;
}
if(curend==cur){
curend = nextend;
nextend = null;
max = Math.max(max,curlevelNodes);
curlevelNodes = 0;
}else{
curlevelNodes++;
}
}
}