题目
给定一个二叉树,返回该二叉树层序遍历的结果(从左到右,一层一层地遍历)
例如:给定的二叉树是{3,9,20,#,#,15,7},
该二叉树层序遍历的结果是
[
[3],
[9,20],
[15,7]
]
提示:
0 <= 二叉树的结点数 <= 1500
示例1
输入:{1,2}
返回值:[[1],[2]]
示例2
输入:{1,2,3,4,#,#,5}
返回值:[[1],[2,3],[4,5]]
思路:队列,迭代
代码
import java.util.*;
public class Solution {
public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {
ArrayList<ArrayList<Integer> > res = new ArrayList<>();
if(root == null){
//如果是空,则直接返回空数组
return res;
}
//队列存储,进行层次遍历
Queue<TreeNode> q = new ArrayDeque<TreeNode>();
q.add(root);
//当前队列还有元素还没访问完
while(!q.isEmpty()){
//记录二叉树的某一行
ArrayList<Integer> row = new ArrayList<>();
//队列中保存了每一层的节点
int n = q.size();
//因先进入的是根节点,故每层节点多少,队列大小就是多少
//每次循环开始队列中都存储了当前要遍历的这一层的所有节点
for(int i = 0; i < n; i++){
TreeNode cur = q.poll();
row.add(cur.val);
//若是左右孩子存在,则存入左右孩子作为下一个层次
if(cur.left != null)
q.add(cur.left);
if(cur.right != null)
q.add(cur.right);
}
//每一层加入输出
res.add(row);
}
return res;
}
}