从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
即每一层的所有节点数作为一个单独的List !
思路:
本题是BFS广度优先的变形。 考点就在于按照节点个数来分层 !
结论: 每一层在弹出队列nodes中 本层的最后一个节点时,此时队列nodes中装的正好就是下一层的所有节点!
即每一层的节点个数为 nodes.size()
!
所以使用for循环,将nodes的size() 作为下一层去遍历的次数 ! 即可以达到分层!
注意: 在for中弹出nodes!
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
// 把每一层当成一个数组 !
List<List<Integer>> res=new ArrayList<>();
Queue<TreeNode> nodes=new LinkedList<>();
if(root==null){ //安全校验
return res;
}
nodes.add(root); // 先添加头节点
while(!nodes.isEmpty()){
List<Integer> list=new ArrayList<>(); // 每一层一个list
int size=nodes.size(); //先记录每一层的节点数,如果用nodes.size(),则可能会变化而出错
// 每一个for就是一层,都放进一个list中
for(int i=0;i<size;i++){
TreeNode n=nodes.poll();
list.add(n.val); //将本层的都装入list
if(n.left!=null){
nodes.add(n.left); //下层的都压入nodes
}
if(n.right!=null){
nodes.add(n.right);
}
}
//本层遍历结束,将list装入res
res.add(list);
}
return res;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/89332.html