大家好,我是被白菜拱的猪。
一个热爱学习废寝忘食头悬梁锥刺股,痴迷于girl的潇洒从容淡然coding handsome boy。
一、题目内容
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
二、解题思路
这与前面的一题相似,方法借用栈实现树的层序遍历,这里需要注意的两点,也是我调bug调了半天才发现。
第一步一定要判空判空判空!!!重要的事情说三遍!
另外一个坑是list这里是地址,不能放在开头创建,假如这样做的话他们使用的是同一个list,resList.add(list),假如list改变的话,里面的所有list都会改变,所以要每次要使用list的时候要在单独创建,不要使用同一个。我就纳闷了最后为了节省空间共享一个,最后list.clear(),为什么结果为空呢,原来问题就出现在这里。
经过两题,树的层序遍历算是心中有些数。这一次做题没有查资料,自己就上手写了,虽然最后没有一次性过,但起码比第一次做无从下手好了些。
三、代码实现
class Solution{
public List<List<Integer>> levelOrder(TreeNode root) {
//层次遍历,需要借助队列
Queue<TreeNode> queue = new LinkedList<>();
List<List<Integer>> resList= new LinkedList<>();
//刚开始一定要判空
if (root == null){
return resList;
}
//根节点入栈
queue.offer(root);
while (!queue.isEmpty()){
List<Integer> list = new LinkedList<>();
int size = queue.size();
for (int i = 0; i < size; i++) {
TreeNode node = queue.poll();
if (node != null){
list.add(node.val);
}
if(node.left !=null){
queue.offer(node.left);
}
if(node.right != null){
queue.offer(node.right);
}
}
resList.add(list);
}
return resList;
}
}