思路:
广度优先遍历
代码:
class Solution {
List<List<Integer>> res=new ArrayList<>();
public List<List<Integer>> levelOrder(TreeNode root) {
if(root==null){
return res;
}
bfs(root);
return res;
}
private void bfs(
TreeNode root
){
Queue<TreeNode> queue=new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()){
int n=queue.size();
Deque<Integer> path=new ArrayDeque<>();
for(int i=0;i<n;i++){
TreeNode node=queue.poll();
path.addLast(node.val);
if(node.left!=null){
// path.addLast(node.left.val);
queue.add(node.left);
}
if(node.right!=null){
// path.addLast(node.right.val);
queue.add(node.right);
}
}
res.add(new ArrayList<>(path));
}
}
}
分解:
1)path在for循环之前声明
2)在判断node.left或node.right时不需要进行path.addLast(node.left.left)的操作,只需要入队即可
复杂度分析:
时间复杂度:O(N)
空间复杂度:O(N)队列中最多存储N个数