思路:在逐层遍历的基础上改写。(1)准备四个变量:currentLevelEnd(表示当前层的结束节点)、nextLevelEnd(表示下一层的结束节点)、currentWeight(表示当前层的宽度)、maxWeight(表示最大宽度).(2)将currentLevelEnd改为二叉树的头节点(其他为默认值),将头节点放入队列。(3)从队列中弹出一个节点,每出队一个节点currentWeight加1。如果出队节点有左孩子,则左孩子入队,如果有右孩子,则右孩子入队。如果有节点入队,则nextLevelEnd变为Thecurrentlyenqueuednode(为下一层查找做准备)。(4)判断步骤3中出队的节点是否等于currentLevelEnd。如果是,修改maxWeight为当前最大宽度,重置currentWeight,修改currentLevelEnd为nextLevelEnd,重置nextLevelEnd;如果不是,继续第3步。(5)执行第3步和第4步,直到队列为空。/***@authorJava与算法学习:周一*/publicstaticinttreeMaxWidth(Nodehead){if(head==null){return0;}队列<节点>队列=newLinkedList<>();节点currentLevelEnd=head;节点nextLevelEnd=null;int当前宽度=0;int最大宽度=0;queue.offer(头);while(!queue.isEmpty()){Nodecurrent=queue.poll();当弹出一个节点时,当前层的宽度增加一个currentWidth++;//当有子节点入队时,修改下一层的结束节点if(current.left!=null){queue.offer(current.left);nextLevelEnd=current.left;}}if(current.right!=null){queue.offer(current.right);nextLevelEnd=current.right;=currentLevelEnd){当前宽度LevelEnd=nextLevelEnd;//重置下一层的结束节点nextLevelEnd=null;}}}返回最大宽度;staticinttreeMaxWidth1(Nodehead){if(head==null){返回0;}队列<节点>队列=newLinkedList<>();queue.add(头);//key:node,value:节点在哪一层HashMap
