【问题标题】:Using a recursive method to return an inorder string in java?使用递归方法在java中返回一个中序字符串?
【发布时间】:2020-01-30 00:52:04
【问题描述】:

我想按顺序遍历二叉树。我做了这个方法:

public String inorder()
    {
        String inorder = "";
        return recrInorder(this.root, inorder);
    }

然后我有一个辅助方法:

private String recrInorder(Node curr,String string)
    {
        if(curr == null)
        {
            return "";
        }
        //Go through left
        recrInorder(curr.getLeft(), string);
        string = string + curr.getData() + ", ";
        //Go through right
        recrInorder(curr.getRight(), string);
        return string;
    }

这只会打印根目录,我想打印整个列表。

【问题讨论】:

    标签: java binary-search-tree inorder


    【解决方案1】:

    在 Java 中,参数是按值传递对象引用的,因此为名为 string 的输入参数分配新值不会在该函数之外更改其值。

    你需要像这样改变你的代码

    private String recrInorder(Node curr,String string)
    {
        if(curr == null)
        {
            return string; // preserve previously calculated value
        }
        //Go through left
        string = recrInorder(curr.getLeft(), string);
        string = string + curr.getData() + ", ";
        //Go through right
        string = recrInorder(curr.getRight(), string);
        return string;
    }
    

    【讨论】:

      【解决方案2】:
      public String inorder() {
          return recrInorder(this.root);
      }
      
      private String recrInorder(Node curr) {
          if (curr == null) return "";
          return recrInorder(curr.getLeft()) + curr.getData() + ", " + rectInorder(curr.getRight());
      }
      

      【讨论】:

        【解决方案3】:

        给定parentleft 子关系和right 子关系,树的遍历取决于您何时visit 父级并访问字符串值。

        给定树的root,如下调用:

            String s =  traverse(root, "");
            System.out.println(s);
        
            public static String traverse(Node n, String s) {
                if (n == null) {
                    return s;
                }
                // s += n.value;  // uncomment this assignment for preorder traversal
                s = traverse(n.left,s);
                // s += n.value;  // uncomment this assignment for inorder traversal
                s = traverse(n.right,s);
                // s += n.value;  // uncomment this assignment for postorder traversal
                return s;
            }
        

        因此,在您的方法中,您可以传递一个标志或 enum 并根据该值警告分配,从而使您的方法适应任何遍历。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-06-30
          • 2020-06-26
          • 2015-03-15
          • 1970-01-01
          • 1970-01-01
          • 2019-03-31
          • 2020-09-25
          相关资源
          最近更新 更多