劍指Offer——序列化二叉樹
阿新 • • 發佈:2017-11-03
size for void vector ufs str == span urn
題目描述:
請實現兩個函數,分別用來序列化和反序列化二叉樹
分析:
先序遍歷可以用來序列化二叉樹,序列化過程中,我們用“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 };
劍指Offer——序列化二叉樹