按照层次遍历二叉树
示例:
【3,9,20,5,null,15,7】
3
/ \
9 20
/ / \
5 15 7
思路
本身给出来的数组就是一层层的顺序
我们在遍历的时候要借助队列queue队列 ,把每层元素元素先入先出;
其中如何确定元素之间是不同层次的?
首先 root放进去queue中,第一层就一个元素;
利用queue 临时队列:
for循环中,
每一次pop出来queue中的元素时候,把元素加入到level的数组中;
之后把这个元素视为node根节点,开始向左子树和右子树放进到queue中
(总结一下:就是父节点们在level ,子节点们在queue等着)
之后res将每层元素level的数组叠加起来。
*有点小注释:*
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
Queue<TreeNode> queue = new ArrayDeque<>();
if (root != null) {
queue.add(root);
}
while(!queue.isEmpty()){
int n = queue.size();//queue中的数量就是一层的数量用来卡住各部分 i<n
List<Integer> level = new ArrayList<>();//level要在循环内定义,每一次都要重新初始化
for(int i = 0;i<n;i++){
TreeNode node = queue.poll();
level.add(node.val);
if(node.left!=null){
queue.add(node.left);
}
if(node.right!=null){
queue.add(node.right);
}
}
res.add(level);
}
return res;
}
}