知道为什么Collections.sort()不能在下面的程序中工作吗?

问题描述 投票:1回答:2

我试图解决一个关于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]

java algorithm data-structures
2个回答
0
投票

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

删除你的当前

Collections.sort(list);

并添加

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

将所有数字添加到所有Lists之后。

如果你需要在添加每个元素后对qazxswpo进行排序(效率较低),则每次添加元素时都需要对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);

0
投票
    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);
    }

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

© www.soinside.com 2019 - 2024. All rights reserved.