层序遍历主要是用到了集合和队列两个数据结构,思路如下:
- 维护一个队列,队列保存每一层所有结点
- list集合收集当前层的所有结点的值
- 遍历所有每一层,从队列中取出当前层所有结点,并收集结果到集合
- 左右节点按顺序加到队尾
队列的创建
Queue<TreeNode> queue=new LinkedList<>();队列有关的方法:
|
throw exception |
return special value |
insert |
add 1、增加元素不能为null 2、其他异常,比如有界队列 |
offer 1、元素不能为null 2、实现内部调用addFirst,既也可能抛出异常 |
remove |
remove 队列空时:NoSuchElementException |
poll 队列空时:return null |
examine |
element 队列空时:NoSuchElementException |
peek 队列空时:return null |
import java.util.*; /* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * } */ public class Solution { /** * * @param root TreeNode类 * @return int整型ArrayList<ArrayList<>> */ public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) { ArrayList<ArrayList<Integer>> res=new ArrayList<ArrayList<Integer>>(); if(root==null) return res; Queue<TreeNode> queue=new LinkedList<>(); queue.offer(root); while(!queue.isEmpty()){ ArrayList<Integer> list=new ArrayList<>(); int count=queue.size(); while(count-->0){ TreeNode node=queue.poll(); list.add(node.val); if(node.left!=null) queue.offer(node.left); if(node.right!=null) queue.offer(node.right); } res.add(list); } return res; } }