二叉树的层序遍历
LeetCode102 题目要求:给你一个二叉树,请你返回其按层序遍历得到的节点值。(即逐层地,从左到右访问所有节点)。
这题的关键在于如何判断某一层是否遍历完成了,我们可以使用一个变量来记录某一层的节点个数,那么该如何得到某一层的节点个数呢。打个比方,我们用一个遍历数组记录要遍历的元素,我们在遍历第一层的节点的时候,我们将它们的子节点也遍历一遍并加入到遍历数组当中,此时遍历数组中就包含了第一层的节点以及它的子节点(也就是第二层的节点),在遍历过程中将第一层的元素弹出,那么此时不就只剩下第二层的节点了吗,这样就可以获得到第二层的节点个数。主要代码如下:
public static List<List<Integer>> simpleOrder(TreeNode root){
if(root == null){
return new ArrayList<>();
}
//创建一个存放最终结果的集合
ArrayList<List<Integer>> res = new ArrayList<>();
//创建一个用于遍历节点的集合
LinkedList<TreeNode> queue = new LinkedList<>();
queue.offer(root);
//遍历树的全部节点
while(!queue.isEmpty()){
//创建一个数组用于接收某一层的全部节点的val
ArrayList<Integer> temp = new ArrayList<>();
//获取每一层的节点个数,该值为下面循环得到的子节点个数
int size = queue.size();
for (int i = 0; i <size ; i++) {
TreeNode node = queue.poll();
temp.add(node.val);
if (node.left!=null){
queue.offer(node.left);
}
if (node.right!=null){
queue.offer(node.right);
}
}
res.add(temp);
}
return res;
}
上述代码难点在于理解变量size的含义与作用