二叉搜索树到字符串

Binary Search Tree to String

我需要创建一个将 BST 转换为字符串的方法,每个 child 都以缩进字符为前缀。

示例:

BinaryTreeSet set=new BinaryTreeSet();
set.add(6);
set.add(4);
set.add(3);
set.add(5);
set.add(9);
set.add(10);
set.add(8);
set.add(0);
System.out.println(set.treeString());

应该生产

=> 6
  => 4
    => 3
      => 0
    => 5
  => 9
    => 8
    => 10

我已经尝试了几个小时了,但我没有取得任何进展。

我能得到的最好的是

=> 6
=> 0
=> 3
=> 5
=> 4
=> 8
=> 10
=> 9

使用以下代码:

public String treeString() {

    StringBuilder builder = new StringBuilder("=> " + root);
    builder.append(System.getProperty("line.separator"));

    nodeString(root, builder);

    return builder.toString();

    }

    private void nodeString(BinaryTreeNode node, StringBuilder builder) {
        if (node == null) {
            return;
        }
        if (node.left != null) {
            nodeString(node.left, builder);
            builder.append("=> " + node.left);
            builder.append(System.getProperty("line.separator"));
        }
        if (node.right != null) {
            nodeString(node.right, builder);
            builder.append("=> " + node.right);
            builder.append(System.getProperty("line.separator"));
        }
    }

不知怎的,我不知道如何得到正确的顺序... 我也不知道如何正确地缩进。

谢谢!

尝试将 builder.append 行放在 之前 递归 nodeString 调用。如果您在示例输出中还需要缩进,您还需要跟踪递归调用中的调用深度。

这解决了我们学习的 BST 定义问题:

private void nodeString(BinaryTreeNode node, StringBuilder builder, int count) {
        if (node == null) {
            return;
        }
        // Left
        if (node.left != null) {
            for (int i = 0; i < count; i++) { // Adding indent
                builder.append("  ");
            }
            builder.append("=> " + node.left);
            builder.append(System.getProperty("line.separator"));
            nodeString(node.left, builder, ++count);
            --count;
        }
        // Right
        if (node.right != null) {
            for (int i = 0; i < count; i++) { // Adding indent
                builder.append("  ");
            }
            builder.append("=> " + node.right);
            builder.append(System.getProperty("line.separator"));
            nodeString(node.right, builder, ++count);
            --count;
        }
    }