将二叉树串行化输出到文件保存,再从文件中读入重新构造。
遍历方式采用先根遍历的方式。
个人感觉其他的遍历方式不能实现功能,具体原因还没有证明。
void serialize(node *root, ofstream &file)
{
if (!root)
return;
file << root->dat << " ";
serialize(root->l, file);
serialize(root->r, file);
}
node * unserialize(ifstream &file)
{
node * root = NULL;
int v;
file >> v;
build_bst_pre(INT_MIN, INT_MAX, v, root, file);
return root;
}
void build_bst_pre(int min, int max, int &v, node * &root, ifstream &file)
{
if (v < max && v > min)
{
int val = v;
root = new node(val);
if (file >> v)
{
build_bst_pre(min, val, v, root->l, file);
build_bst_pre(val, max, v, root->r, file);
}
}
}