【问题标题】:Get Elements from tree at given level从给定级别的树中获取元素
【发布时间】:2020-06-06 15:55:03
【问题描述】:

我想获取树的给定深度/级别的所有整数键。

我尝试的解决方案是这样的:

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 recursion linked-list tree


    【解决方案1】:

    由于在 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));
    

    【讨论】:

      【解决方案2】:

      您的代码的问题是每次调用函数时都会创建list,并且递归调用不会将值添加到现有的list,而是每次都创建一个新的list。将声明 LinkedList&lt;Integer&gt; list = new LinkedList&lt;Integer&gt;(); 放在函数外部,您的代码将按预期工作,或者您甚至可以将 list 引用传递给函数并为其添加值!

      【讨论】:

      • 就是这样!我现在将list 作为一个额外的参数传递,它的工作原理和expexted 一样
      猜你喜欢
      • 1970-01-01
      • 2020-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多