
层序遍历就是从左到右依次遍历。这个时候就可以使用队列的方式。例如先把头节点入队,然后遍历开始,首先计算队列长度,第一层,长度为了,遍历一次,依次出队,头结点出队,然后头结点的左右子节点入队。再次遍历,队列长度为2,在出队入队,队列长度为4。这样每次每次遍历都是把当层的所有节点轮询完成,然后每个节点的左右节点在入队,完成下一层的关联。
代码如下:
- public List
> levelOrder(TreeNode root) {
- List
> ans = new LinkedList<>();
- if (root==null){
- return ans;
- }
- //构建一个队列 先进先出
- Queue
queue = new LinkedList<>(); - queue.add(root);
- while (!queue.isEmpty()){
- List
list = new ArrayList<>(); - //每次记录 queue的长度
- int size = queue.size();
- for (int i = 0; i
- TreeNode cur = queue.poll();
- if (cur.left!=null){
- queue.add(cur.left);
- }
- if (cur.right!=null){
- queue.add(cur.right);
- }
- list.add(cur.val);
- }
- ans.add(list);
- }
- return ans;
- }