![](https://img.haomeiwen.com/i19730044/85c6659d5c43709d.png)
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
if(root==null) return res;
List<TreeNode> level = new LinkedList<TreeNode>();
level.add(root);
List<Integer> treeval = new ArrayList<>();
treeval.add(root.val);
res.add(treeval);
while(!level.isEmpty()){
treeval = new ArrayList<>();
int size=level.size();
while(size>0){
TreeNode temp = level.get(0);
//System.out.println(temp.val);
if(temp.left!=null){
//System.out.println(temp.left.val);
treeval.add(temp.left.val);
level.add(temp.left);
}
if(temp.right!=null){
//System.out.println(temp.right.val);
treeval.add(temp.right.val);
level.add(temp.right);
}
level.remove(0);
size=size-1;
}
if(treeval.size()>0) res.add(treeval);
}
return res;
}
}
这道题有两个点需要注意,一个是我将保存每层所有结点的level变量从ArrayList改成了LinkedList,这样对于level.remove(0)操作来说,每次移除第一个元素的话,链表结构的操作复杂度比数组结构要小得多。
第二个点是在每次循环中,我一开始都将treeval在原数组上清空,导致最终的res为空,原因是res.add(treeval)时,类似于浅拷贝,res里面只存放了res的引用,所有每次在res原数组上清空,res所包含的treeval都是空的。
网友评论