我想在树的给定深度/级别获取所有整数键。
我尝试的解决方案如下所示:
public LinkedList<Integer> keysAtDepth(int depth) {
return getGivenLevel(depth, root);
}
private LinkedList<Integer> getGivenLevel(int depth, Node root) {
LinkedList<Integer> list = new LinkedList<Integer>();
if (root == null) {
return list;
}
if (depth == 1) {
System.out.println(root.key);
list.add(root.key);
} else if (depth > 1 ) {
getGivenLevel(depth-1, root.left);
getGivenLevel(depth-1, root.right);
}
return list;
}
但这给我一个空的清单。print
工作得很好,但是我怎样才能让它工作,以便我在列表中获取密钥?
由于修改参数在 Java 中不是一个好的做法,因此最小副作用解决方案应替换以下两行:
getGivenLevel(depth-1, root.left);
getGivenLevel(depth-1, root.right);
跟:
list.addAll(getGivenLevel(depth-1, root.left));
list.addAll(getGivenLevel(depth-1, root.right));
代码的问题在于每次调用函数时都会创建list
,并且递归调用不会向现有list
添加值,而是每次都创建一个新list
。将语句放在函数外部LinkedList<Integer> list = new LinkedList<Integer>();
,您的代码将按预期工作,或者您甚至可以传递对函数的list
引用并向其添加值!