代码之家  ›  专栏  ›  技术社区  ›  Matt

二进制搜索树遍历方法,以便字符串

  •  1
  • Matt  · 技术社区  · 7 年前

    我用自己的节点从头开始创建了一个二叉搜索树,当我添加节点并将树打印到控制台时,它可以完美地运行。然而,我有一段半的时间 toString 方法工作。

    我改变了我的 toString公司 方法 MakeString ,因为我认为在将可比较的类型数据转换为字符串时会感到困惑。我可以得到返回一个节点的方法,也可以只返回对象形式的方法,但不能以字符串形式返回整个树。这个 printInOrder() 这个方法非常有效,为什么我的 MakeString() 方法

    public void printInOrder(){
    
        if (left != null) left.printInOrder();
    
         System.out.println(data);
    
        if (right != null) right.printInOrder();
    }
    
    public String MakeString(){
    
        String OrderedTree;
        StringBuilder sb = new StringBuilder();
        if (data == null) return "Tree is empty";
    
        if (left != null) left.MakeString();
    
         sb.append(data);
    
        if (right != null) right.MakeString();
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Dave Cousineau    7 年前

    如果需要在整个递归过程中保留某些内容,则应将其作为参数传递。如果您希望避免准备初始调用或在递归之前或之后有其他事情要做,那么这通常会产生一对方法。

    在您的情况下,您正在使用 StringBuilder 它需要在递归之前创建,在整个过程中保留,然后在递归之后使用。

    前任:

    public String MakeString() {
       if (data == null)
          return "Tree is empty";
    
       StringBuilder sb = new StringBuilder();
    
       MakeString(sb);
    
       return sb.toString();
    }
    
    private void MakeString(StringBuilder sb) {
       if (left != null)
          left.MakeString(sb);
    
       sb.append(data);
    
       if (right != null)
          right.MakeString(sb);
    }