剑指Offer——序列化二叉树
题目描述:
请实现两个函数,分别用来序列化和反序列化二叉树
分析:
先序遍历可以用来序列化二叉树,序列化过程中,我们用“0xFFFFFFFF”表示结点为NULL。
反序列化便很简单,遇到“0xFFFFFFFF”就返回NULL,其他时候就直接产生一个结点。
代码:
1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left; 5 struct TreeNode *right; 6 TreeNode(int x) : 7 val(x), left(NULL), right(NULL) { 8 } 9 }; 10 */ 11 class Solution { 12 public: 13 vector<int> buf; 14 void dfs1(TreeNode *root) { 15 if(!root) buf.push_back(0xFFFFFFFF); 16 else { 17 buf.push_back(root->val); 18 dfs1(root->left); 19 dfs1(root->right); 20 } 21 } 22 TreeNode* dfs2(int* &p) { 23 if(*p == 0xFFFFFFFF) { 24 p++; 25 return NULL; 26 } 27 TreeNode* res = new TreeNode(*p); 28 p++; 29 res->left = dfs2(p); 30 res->right = dfs2(p); 31 return res; 32 } 33 char* Serialize(TreeNode *root) { 34 buf.clear(); 35 dfs1(root); 36 int bufSize = buf.size(); 37 int *res = new int[bufSize]; 38 for(int i = 0; i < bufSize; i++) res[i] = buf[i]; 39 return (char*)res; 40 } 41 TreeNode* Deserialize(char *str) { 42 int *p = (int*)str; 43 return dfs2(p); 44 } 45 };