Java 从给定级别的树中获取元素
我希望获得树的给定深度/级别上的所有整数键 我尝试的解决方案如下所示:Java 从给定级别的树中获取元素,java,recursion,linked-list,tree,Java,Recursion,Linked List,Tree,我希望获得树的给定深度/级别上的所有整数键 我尝试的解决方案如下所示: public LinkedList<Integer> keysAtDepth(int depth) { return getGivenLevel(depth, root); } private LinkedList<Integer> getGivenLevel(int depth, Node root) { LinkedList<Integer> list = new
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;
}
public LinkedList keysAtDepth(int-depth){
返回getGivenLevel(深度,根);
}
私有LinkedList getGivenLevel(整数深度,节点根){
LinkedList=新建LinkedList();
if(root==null){
退货清单;
}
如果(深度==1){
System.out.println(root.key);
list.add(root.key);
}否则,如果(深度>1){
getGivenLevel(深度1,根,左);
getGivenLevel(depth-1,root.right);
}
退货清单;
}
但这给了我一张空名单。
print
工作得很好,但是我如何才能使它工作,以便将键放在列表中?代码的问题是,每次调用函数时都会创建list
,递归调用不会向现有的list
添加值,而是每次都创建一个新的list
。放置语句LinkedList=newlinkedlist()代码>在函数外部,您的代码将按预期工作,或者您甚至可以将列表
引用传递给函数并向其添加值 由于在Java中修改参数不是一种好的做法,因此最小副作用解决方案应该取代这两行:
getGivenLevel(depth-1, root.left);
getGivenLevel(depth-1, root.right);
与:
就这样!我现在将列表作为一个额外参数传递,它的工作方式与expexted相同
list.addAll(getGivenLevel(depth-1, root.left));
list.addAll(getGivenLevel(depth-1, root.right));