題目
/**
* 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;
}
}
這道題有兩個點需要注意档押,一個是我將保存每層所有結(jié)點的level變量從ArrayList改成了LinkedList,這樣對于level.remove(0)操作來說祈纯,每次移除第一個元素的話令宿,鏈表結(jié)構(gòu)的操作復(fù)雜度比數(shù)組結(jié)構(gòu)要小得多。
第二個點是在每次循環(huán)中腕窥,我一開始都將treeval在原數(shù)組上清空粒没,導(dǎo)致最終的res為空,原因是res.add(treeval)時簇爆,類似于淺拷貝癞松,res里面只存放了res的引用爽撒,所有每次在res原數(shù)組上清空,res所包含的treeval都是空的响蓉。