Java基礎----ArrayList中的clear方法以及ArrayList對象


今天在做Leetcode 102. 二叉樹的層序遍歷 時, 不管怎么試,每一層的輸出都為空,如下圖:

 

上述結果所使用的代碼如下。

 1     public List<List<Integer>> levelOrder(TreeNode root) {
 2         if(root == null) return null;
 3         List<List<Integer>> res = new ArrayList<>();
 4         Queue<TreeNode> queue = new LinkedList<>();
 5         queue.add(root);
 6         TreeNode dummy = new TreeNode(Integer.MIN_VALUE);
 7         queue.add(dummy);
 8         ArrayList<Integer> level = new ArrayList<>();
 9         while(!queue.isEmpty()){
10             TreeNode temp = queue.poll();
11             if(temp.val == dummy.val) {
12                 res.add(level);
13                 System.out.println(level);
14                 level.clear();
15                 if(!queue.isEmpty()) {
16                     queue.offer(dummy);
17                 }
18             }else{
19                 level.add(temp.val);
20                 if(temp.left != null) {
21                     queue.offer(temp.left);
22                 }
23                 if(temp.right != null) {
24                     queue.offer(temp.right);
25                 }
26             }
27         }
28         return res;
29     }

后來經過檢查,用來存每一層元素的level,只在進入循環之前創建了一次,因此其地址值不變,如果將其加入到res中,當一層遍歷結束加入到res之后,接着又執行了level.clear()方法,該clear方法每一次都把level中的元素清空,所以產生了每層輸出都為空的結果,經過以上分析之后,把代碼做出如下修改:

 1 public List<List<Integer>> levelOrder(TreeNode root) {
 2     if(root == null) return null;
 3     List<List<Integer>> res = new ArrayList<>();
 4     Queue<TreeNode> queue = new LinkedList<>();
 5     queue.add(root);
 6     TreeNode dummy = new TreeNode(Integer.MIN_VALUE);
 7     queue.add(dummy);
 8     ArrayList<Integer> level = new ArrayList<>();
 9     while(!queue.isEmpty()){
10         TreeNode temp = queue.poll();
11         if(temp.val == dummy.val) {
12             res.add(level);
13             level = new ArrayList<>();
14             if(!queue.isEmpty()) {
15                 queue.offer(dummy);
16             }
17         }else{
18             level.add(temp.val);
19             if(temp.left != null) {
20                 queue.offer(temp.left);
21             }
22             if(temp.right != null) {
23                 queue.offer(temp.right);
24             }
25         }
26     }
27     return res;
28 }

 

修改完了之后,還是有點疑惑,然后去知乎搜了一下,看到了大神的解答https://www.zhihu.com/question/31203609


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM