这是 "填充每个节点的下一个右侧指针 II" 题目的一个示例解决方案:
将每个下一个指针指向其下一个右侧节点。如果没有下一个右侧节点,则应将下一个指针设置为 NULL。
public void connect(Node root) {
HashMap<Integer,List<Node>> map = new HashMap<Integer,List<Node>>();
traverse(root, map , 0);
}
private void traverse(Node root, HashMap<Integer,List<Node>> map , int level){
if(root != null){
if(map.containsKey(level)){
List<Node> temp = map.get(level);
Node set = temp.get(temp.size() -1 );
set.next = root;
root.next = null;
temp.add(root);
map.put(level,temp);
}
else{
root.next = null;
List<Node> temp = new ArrayList<Node>();
temp.add(root);
map.put(level,temp);
}
level++;
traverse(root.left, map , level);
traverse(root.right, map,level);
System.out.println("test");
}
}
解决方案本身并不重要,但我正在努力确定它的空间复杂度:
从逻辑上讲,我们在HashMap中存储的对象类型应该影响其空间复杂度,但是我们如何通过拥有映射键和值来确定它呢?
换句话说,如果我们只在此映射中存储了5个键(对于5个节点),我们能否得出 HashMap<Integer,List<Node>> map = new HashMap<Integer,List<Node>>();
的空间复杂度仅为O(n)
,还是因为这些键的值是一个List
,所以应该更高?
List<Node>
集合,但是我们如何确定总体空间复杂度呢? - Yar