我正在尝试解决有关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]]
答案 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);
}
在地图中添加所有元素后,请尝试对元素进行排序。