带括号的java打印顺序BST

带括号的java打印顺序BST,java,string,binary-search-tree,parentheses,inorder,Java,String,Binary Search Tree,Parentheses,Inorder,我想返回一个包含树中所有键的字符串,按键的存储顺序。每个子树中的键应包含在括号中 _7_ / \ _3_ 8 / \ 1 6 \ / 2 4 \ 5 此BST的输出应该是((()1(()2())3((()4(()5())6())7(()8())。 我的代码是: public String printKeysInOrder() { if (isEmpty()) {

我想返回一个包含树中所有键的字符串,按键的存储顺序。每个子树中的键应包含在括号中

        _7_
      /     \
   _3_      8
 /     \
1       6
 \     /
  2   4
       \
        5
此BST的输出应该是
((()1(()2())3((()4(()5())6())7(()8())
。 我的代码是:

public String printKeysInOrder() {
    if (isEmpty()) {
        return "()";
    }

    printInOrderRec(root);

    System.out.print(sb.toString());
    return sb.toString();
}

StringBuilder sb = new StringBuilder();

private String printInOrderRec(Node root) {
    if (root == null) {
        return null;
    }
    sb.append("(");
    printInOrderRec(root.left);
    sb.append("(");
    sb.append(")");

    sb.append(root.val);

    printInOrderRec(root.right);

    return null;
}
这给了我输出:
((()1(()2()3)(()4(()5()6()7(()8
)。
我在这方面已经做了很多年了,不知道在哪里以及如何添加缺少的括号。如果有任何帮助,我将不胜感激。

在开始编码解决方案之前,让我们试着画出应该如何生成输出

(--------------------------------7-------)
 (------------3-----------------) (--8--)
  (--1-------) (------------6--)   () ()
   () (--2--)   (--4-------) ()
       () ()     () (--5--)
                     () ()
在这里,每一对括号都定义了一个。我不想描述每个调用堆栈,否则这个答案会很长。但是,从图中我们可以找到每个调用堆栈的5个部分

  • 左偏执
  • 左撇子
  • 价值观
  • 对的孩子
  • 右偏执
  • 因此,您的
    printInOrderRec
    方法可能如下所示:

    private void printInOrderRec(Node root) {
        sb.append("(");
        if (root != null) {
            printInOrderRec(root.left);
            sb.append(root.val);
            printInOrderRec(root.right);
        }
        sb.append(")");
    }
    

    注意:我将返回类型设置为void,因为在您的代码中,它只返回null。

    在跳转到编码解决方案之前,让我们试着画出应该如何生成输出

    (--------------------------------7-------)
     (------------3-----------------) (--8--)
      (--1-------) (------------6--)   () ()
       () (--2--)   (--4-------) ()
           () ()     () (--5--)
                         () ()
    
    在这里,每一对括号都定义了一个。我不想描述每个调用堆栈,否则这个答案会很长。但是,从图中我们可以找到每个调用堆栈的5个部分

  • 左偏执
  • 左撇子
  • 价值观
  • 对的孩子
  • 右偏执
  • 因此,您的
    printInOrderRec
    方法可能如下所示:

    private void printInOrderRec(Node root) {
        sb.append("(");
        if (root != null) {
            printInOrderRec(root.left);
            sb.append(root.val);
            printInOrderRec(root.right);
        }
        sb.append(")");
    }
    

    注意:我已将返回类型设置为
    void
    ,因为在您的代码中,它只返回空值。

    感谢sazzad的清晰解释!我很感激!谢谢sazzad的清晰解释!我很感激