记录一个写程序遇到的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; }
}

 

posted @ 2020-05-14 09:01  小城熊儿  阅读(882)  评论(0编辑  收藏  举报