二进制搜索树到字符串

时间:2017-03-22 12:44:53

标签: java binary-search-tree stringbuilder

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

示例:

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"));
        }
    }

不知怎的,我无法弄清楚如何让订单正确...... 我也不知道如何正确地进行缩进。

谢谢!

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

这可以解决我们学到的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;
        }
    }