码迷,mamicode.com
首页 > 编程语言 > 详细

Java基础----ArrayList中的clear方法以及ArrayList对象

时间:2020-06-14 10:46:26      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:list   怎么   看到了   bsp   rsa   add   integer   print   层遍历   

今天在做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

Java基础----ArrayList中的clear方法以及ArrayList对象

标签:list   怎么   看到了   bsp   rsa   add   integer   print   层遍历   

原文地址:https://www.cnblogs.com/zhang-yi/p/13123776.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!