题目描述
思路
利用list和queue来解决
因为输出结果是一个二维的数组,所以先定义一个list用来集合每一层的list,然后定义一个队列来遍历二叉树
如果根节点为空,则直接返回
当节点不为空时,将其加入到队列中,当队列不为空的时候,开始遍历
先定义一个整数len用来表示队列的长度que.size(),然后定义一个list来接收这一层的的节点的值
当len-->0时,从队列中poll出一个节点,将他的值add进list中,再看它的左右孩子是否为空,如果不为空,则将其加入到队列中,当len=0则表示这一层的节点已经遍历完了,队列中如果还有剩余的节点是下一层的了
最后将每一层的list加入到result中,退出循环将其返回
代码
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> result =new ArrayList<List<Integer>>();
Queue<TreeNode> que=new LinkedList<TreeNode>();
if(root==null){
return result;
}
que.offer(root);
while(!que.isEmpty()){
int len = que.size();
List<Integer> res = new ArrayList<Integer>();
while(len-->0){
TreeNode node = que.poll();
res.add(node.val);
if(node.left!=null){
que.offer(node.left);
}
if(node.right!=null){
que.offer(node.right);
}
}
result.add(res);
}
return result;
}
}
收获
定义泛型为list的list:List<List<Integer>> result = new ArrayList<List<Integer>>();
queue添加节点:queue.offer()
queue弹出元素:queue.poll()