其实刷题最重要的是要总结,就跟自己平时写日记一样,如果没有总结就没办法事半功倍的把事情做好。
BFS实际上就分那么几个步骤
- 把root丢到队列(queue)里面去,然后开始循环
while(!queue.isEmpty()) {
... //在循环里把每个队列的第一个拿出来,然后search他的孩子
List<Integer> currentLevel = new ArrayList<>(); //需要存储就建这个,不需要就不用。
int size = queue.size();
for (int i = 0; i < size; i++) {
treeNode = queue.poll();
if (treeNode.left != null) {
queue.offer(treeNode.left);
}
if (treeNode.right != null) {
queue.offer(treeNode.right);
}
}
//for loop 之后就是当前层级已经遍历完了,如果有需要就保存到答案里
results.add(currentLevel);
}
用这个while loop把所有的层级都遍历一遍。
如果你需要把每层保存在单独的Array里面,那就需要在while每次开始的时候建立一个新的ArrayList。
while(!queue.isEmpty()) {
... //在循环里把每个队列的第一个拿出来,然后search他的孩子
List<Integer> currentLevel = new ArrayList<>(); //需要存储就建这个,不需要就不用。
最后while 结束之后return结果就可以了
要记得在一开始的时候判断一下他们给你的list是否为空(证明你想到了这种edge cases)
网友评论