知道为什么Collections.sort()在以下程序中不起作用吗?

时间:2019-04-28 07:55:53

标签: java algorithm data-structures

我正在尝试解决有关Leetcode的问题,该问题与二叉树的垂直遍历有关,并且我编写了以下代码。 在这里Collections.sort()无法正常工作,我无法理解为什么。需要一些指针来修复此代码/

class Solution {
    Map<Integer,List<Integer>>map = new TreeMap<>();
    List<List<Integer>> result = new ArrayList<>();
    public List<List<Integer>> verticalTraversal(TreeNode root)  {
        if(root == null)
            return null;
        rec(0,root);
        for(Integer i : map.keySet())
        {
            result.add((map.get(i)));
        }
        return result;

    }
    public void rec(int pos, TreeNode node)
    {
        if(node == null)
            return;
        List<Integer>list = map.get(pos);
        if(list == null)
        {
            list = new ArrayList<Integer>();
            list.add(node.val);
            Collections.sort(list);
            map.put(pos,list);
        }
        else
            list.add(node.val);
        rec(pos-1,node.left);
        rec(pos+1,node.right);
    }
}

输入: [0,8,1,null,null,3,2,null,4,5,null,null,7,6]

预期:[[8],[0,3,6],[1,4,5],[2,7]] 实际:[[8],[0,3,6],[1,4,5],[7,2]]

2 个答案:

答案 0 :(得分:0)

创建内部列表时,只对内部列表进行一次排序。添加所有元素后对它们进行排序会更有意义。

删除当前的

Collections.sort(list);

并添加

for (List<Integer> list : map.values()) {
    Collections.sort(list);
}

在将所有数字添加到所有List之后。

如果需要在添加每个元素之后对List进行排序(这会降低效率),则每次添加元素时都需要对List进行排序。

    if(list == null)
    {
        list = new ArrayList<Integer>();
        list.add(node.val);
        Collections.sort(list);
        map.put(pos,list);
    }
    else
        list.add(node.val);

将成为

    if(list == null)
    {
        list = new ArrayList<Integer>();
        list.add(node.val); // no need to sort a List with a single element
        map.put(pos,list);
    }
    else {
        list.add(node.val);
        Collections.sort(list);
    }

答案 1 :(得分:0)

if (list == null) {
            list = new ArrayList<Integer>();
            list.add(node.val);
            Collections.sort(list);
            map.put(pos, list);
        }

在地图中添加所有元素后,请尝试对元素进行排序。