1. 程式人生 > >劍指Offer——序列化二叉樹

劍指Offer——序列化二叉樹

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——序列化二叉樹