二刷
代码
class Solution {
public int[] levelOrder(TreeNode root) {
if(root==null) return new int[0];
LinkedList<TreeNode> list=new LinkedList<>();
ArrayList<Integer> ans = new ArrayList<>();
TreeNode before;
list.addLast(root);
while(!list.isEmpty()){
before=list.removeFirst();
ans.add(before.val);
if(before.left!=null)
list.addLast(before.left);
if(before.right!=null)
list.addLast(before.right);
}
int[] res=new int[ans.size()];
for(int i=0;i<ans.size();i++){
res[i]=ans.get(i);
}
return res;
}
}
复杂度
时间复杂度 O(N) : N为二叉树的节点数量,即 BFS 需循环 N 次。
空间复杂度O(N) : 最差情况下,即当树为平衡二叉树时,最多有 N/2个树节点同时在 queue 中,使用 O(N)大小的额外空间。
结果
为什么内存消耗很大呢,
一刷
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int[] levelOrder(TreeNode root) {
if(root==null)
return new int[0];
LinkedList<TreeNode> queue=new LinkedList<>();
int[] res=new int[1010];
int i=0;
TreeNode before;
queue.addLast(root);
while(!queue.isEmpty()){
before=queue.removeFirst();
res[i++]=before.val;
if(before.left!=null)
queue.addLast(before.left);
if(before.right!=null)
queue.addLast(before.right);
}
int[] b=new int[i];
System.arraycopy(res,0,b,0,i);
return b;
}
}
时间复杂度,空间复杂度都是O(N)