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