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));