http://articles.leetcode.com/2010/09/saving-binary-search-tree-to-file.html
preorder traversal将bst存下来。
如何恢复?依然preorder。母节点的数值决定了子节点可以存储的范围,所以我们拿到一个新的数字时,看他是不是在母节点的规定范围内;否则就继续到母节点的另外一个子树中尝试。
时间复杂度分析:O(n),和preorder traversal是一样的访问顺序,只是每次多了一次比较
public static BST readBST(String fileName) throws Exception {
BufferedReader fin = new BufferedReader(new FileReader(fileName));
data = Integer.parseInt(fin.readline());
bst = new BST();
bst.root = new Node(-1, null, null);
buildBST(bst.root, new int[] {data,}, Integer.MIN_VALUE, Integer.MAX_VALUE, fin);
}
private void buildBST(Node node, int[] data, int low, int high, BufferedReader fin) {
if (data[0] > low && data[0] < high) {
node.data = data[0];
try {
data[0] = Integer.parseInt(fin.readline());
if (data[0] > low && data[0] < node.data) {
node.left = new Node(-1, null, null);
buildBST(node.left, data, low, node.data, fin);
}
if (data[0] > node.data && data[0] < high) {
node.right = new Node(-1, null, null);
buildBST(node.right, data, node.data, high, fin);
}
<span style="white-space:pre"> </span>} catch (Exception e) {}
}
}