记录一个写程序遇到的bug,java中list.clear问题
我用嵌套集合填充数据时候,发现一个奇怪的地方
list.clear()方法在清理当前集合同时,可能会清理掉我的目标集合。
解决方法,每次填充时候申请一个新的list,不适用list.clear()函数
代码中注解掉的就是之前的方法
此处代码为一个面试题,遍历树结构,并且按照层次输出,注解是胡乱写的,当时为了粘贴方便就没修改,莫当真
import java.util.LinkedList; import java.util.List; import java.util.Scanner; class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> li = new LinkedList<List<Integer>>(); List<List<Integer>> result = new LinkedList<List<Integer>>(); if(root == null) {return result;} //li.add(0); int deep = 0; deep = finddeep(root,deep); System.out.println("test:"+deep); li = finddata(root,deep,li); System.out.println(li); //List<Integer> te = new LinkedList<Integer>(); for (int j = deep; j >= 1; j--) { List<Integer> te = new LinkedList<Integer>(); for (int i = 0; i < li.size(); i++) { if(li.get(i).get(1) == j) { te.add(li.get(i).get(0)); } } result.add(te); //te.clear(); } return result; } private List<List<Integer>> finddata(TreeNode root, int deep, List<List<Integer>> li) { // TODO Auto-generated method stub List<Integer> l = new LinkedList<Integer>(); if(root.left == null & root.right == null) { //deep = deep -1; l.add(root.val); l.add(deep); deep = deep -1; li.add(l); return li; } if(root.left != null & root.right == null) { //左树 //到底了 l.add(root.val); l.add(deep); deep = deep -1; li.add(l); li = finddata(root.left,deep,li); return li; } if(root.left == null & root.right != null) { //左树 //到底了 l.add(root.val); l.add(deep); deep = deep -1; li.add(l); li = finddata(root.right,deep,li); return li; } if(root.left != null & root.right != null) { //左树 //到底了 l.add(root.val); l.add(deep); deep = deep -1; li.add(l); li = finddata(root.left,deep,li); li = finddata(root.right,deep,li); return li; } return null; } private int finddeep(TreeNode root, int deep) { // TODO Auto-generated method stub if(root.left == null & root.right == null) { //到底了 return 1; } if(root.left != null & root.right == null) { //到底了 return finddeep(root.left,deep)+1; } if(root.left == null & root.right != null) { //到底了 return finddeep(root.right,deep)+1; } if(root.left != null & root.right != null) { //到底了 return finddeep(root.left,deep)+1>finddeep(root.right,deep)+1 ? finddeep(root.left,deep)+1:finddeep(root.right,deep)+1; } return 0; //return finddeep(root.right,deep)+1; } public static void main(String[] args) { //Scanner sc = new Scanner(System.in); TreeNode root = new TreeNode(0); TreeNode r1 = new TreeNode(1); TreeNode r2 = new TreeNode(2); TreeNode r3 = new TreeNode(3); TreeNode r4 = new TreeNode(4); TreeNode r5 = new TreeNode(5); TreeNode r6 = new TreeNode(6); root.left = r1; root.right = r2; r2.left = r3; r2.right = r4; r3.left = r5; r3.right = r6; List<List<Integer>> list = new Solution().levelOrder(null); System.out.println(list); } } class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } }