题目描述
102. 二叉树的层序遍历
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回其层序遍历结果:
[
[3],
[9,20],
[15,7]
]
解决方案:层次遍历又称广度优先遍历,利用队列先进先出的特点,首先让根节点进队,然后进入循环,判断队列是否为空,同时统计队列此时的长度,将此时队列中的元素全部出队,同时每出队一个元素,则把该元素的左右节点进队,直到队列长度为空为止。
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
ArrayList<List<Integer>> lists = new ArrayList<>();
if(root==null) return lists;
Queue<TreeNode> q = new LinkedList<>();
q.offer(root);
while(!q.isEmpty()){
ArrayList<Integer> list = new ArrayList<>();
int len = q.size();
while(len>0){
TreeNode tmp = q.poll();
list.add(tmp.val);
if(tmp.left!=null)q.offer(tmp.left);
if(tmp.right!=null)q.offer(tmp.right);
len--;
}
lists.add(list);
}
return lists;
}
}