java - 从文件创建二叉树

标签 java file-io binary-tree

我试图在结束程序时将二叉树保存到文件中,并在再次运行程序时重建它。我的保存方法如下所示:

public static void save(TreeNode node, BufferedWriter out) {
    if (node == null) return;
    out.write(node.value()); // these nodes hold Strings
    out.newLine();
    save(node.left(), out);
    save(node.right(), out);
}

我遇到问题的部分是重建过程,因此非常感谢您提供帮助。

编辑:每个节点都有 2 个或 0 个子节点。

最佳答案

如果您想将树保存在完全相同的分支结构中,则需要表示 null。

private static final String NULL_TREE_NODE = "";

public static void save(TreeNode node, BufferedWriter out) {
    if (node == null) {
        out.write(NULL_TREE_NODE); // null
        out.newLine();
        return;
    }
    assert !node.value().equals(NULL_TREE_NODE); // Reserver for us.
    assert !node.value().matches(".*[\r\n].*"); // Newline not allowed in value.
    out.write(node.value()); // these nodes hold Strings
    out.newLine();
    save(node.left(), out);
    save(node.right(), out);
}

public static TreeNode load(BufferedReader in) throws IOException {
    String value = in.readLine();
    if (value == null)
        throw new EOFException(); // Unexpected end of input.
    if (value.equals(NULL_TREE_NODE)) {
        return null;
    }
    TreeNode node = new TreeNode();
    node.value(value);
    node.left(load(in));
    node.right(load(in));
    return node;
}

关于java - 从文件创建二叉树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10420851/

相关文章:

javascript - 使用 Javascript 格式化纯文本的最快方法

c - 字符数组在文件处理中不起作用

c++ - 验证表达式树

Java多个catch block 中 `e`变量的类型是什么?

java - 如何创建分布式计算系统?

java - 如何将数组数据类型(H2数据库)转换为java List<Long>?

java - Spring security PreAuthentication Filter 要求 AuthenticationEntryPoint

swift - 如何在 Swift/XCTest 中写入本地文件?

java - 无法从内部类转换到类

Java继承而不强制转换