【问题标题】:Get all nodes of a specific level of a Binary Tree获取二叉树特定级别的所有节点
【发布时间】:2021-04-28 09:43:24
【问题描述】:

我有一个 BinaryTree,我想获取特定级别的所有节点。顺序无所谓。我想尝试用 recursion 来做到这一点。我的方法是这样的:

public List<T> getNodesOnLevel(int i){
    int recursionTool = i
    //to do
    recursionTool-=1
    }

我尝试了 while(recursionTool != 0){ method.... 然后 recursionTool -1} 但我最终得到了所有节点直到想要的水平。 我的节点如下所示:

class Node<T>{
    T val;
    Node<T> left;
    Node<T> right;
    Node(T v){
        val = v;
        left = null;
        right = null;
    }

【问题讨论】:

    标签: java recursion binary-tree


    【解决方案1】:

    可以通过连接递归调用返回的列表将其实现为纯函数算法。不幸的是,这在 Java 中效率很低,因为所有检索到的值都通过列表创建或连接在每个递归级别复制一次。

    如果您愿意使用突变,这里有一个避免复制的解决方案(假设thisNode&lt;T&gt;):

    private void getNodesOnLevel(int level, List<T> list) {
        if (node == null) return;
        if (level == 0) {
            list.add(this.val);
        } else {
            this.left.getNodesOnLevel(level - 1, list);
            this.right.getNodesOnLevel(level - 1, list);
        }
    }
    

    上述方法需要以空(可变)列表作为第二个参数调用,因此我们需要另一个方法:

    public List<T> getNodesOnLevel(int level) {
        List<T> list = new ArrayList<>();
        this.getNodesOnLevel(level, list);
        return list;
    }
    

    (在复杂性方面,纯函数解决方案是O(LN),其中L 是级别,N 是该级别的节点数。我的解决方案是O(N)。列表中的每个值都是由于ArrayList.append 实现列表调整大小的方式,平均复制了两次。通过创建容量为 2level 的列表可以避免调整大小。)

    【讨论】:

      【解决方案2】:

      这可能会对您有所帮助。我已经将这种方法用于打印节点,但您可以更改它。

      public void printGivenLevel(TNode root, int level) {
          if (root == null)
              return;
          if (level == 1 && root.getValue() != null) {
         //  here,  add  root.getValue() to list
          } else if (level > 1) {
              printGivenLevel(root.getLeft(), level - 1);
              printGivenLevel(root.getRight(), level - 1);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-10
        • 2018-11-25
        • 2012-10-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多