//请实现两个函数,分别用来序列化和反序列化二叉树。
#include "ostream"
#include "istream"
using namespace std;
struct treeNode
{
treeNode* left;
treeNode* right;
int value;
};
//前序遍历,遇null化特殊字符$。
void serialize(treeNode* pRoot, ostream& stream)
{
if (pRoot == NULL)
{
stream << "$,";
}
stream << pRoot->value << ",";
serialize(pRoot->left, stream);
serialize(pRoot->right, stream);
}
void deserialize(treeNode **pRoot, istream& stream)
{
char num;
if (num = stream.get() != '$')
{
*pRoot = new treeNode();
(*pRoot)->value = atoi(&num);
(*pRoot)->left = NULL;
(*pRoot)->right = NULL;
stream.ignore();
deserialize(&((*pRoot)->left), stream);
deserialize(&((*pRoot)->right), stream);
}
stream.ignore();
}
很棒!
序列化和反序列化,就是要把树写成序列,然后序列可以反写/重建成树。