我试图解决一个关于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]
您只在创建内部列表时对其进行一次排序。添加所有元素后对它们进行排序会更有意义。
删除你的当前
Collections.sort(list);
并添加
for (List<Integer> list : map.values()) {
Collections.sort(list);
}
将所有数字添加到所有List
s之后。
如果你需要在添加每个元素后对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);
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);
}
添加地图中的所有元素后,请尝试对元素进行排序。