剑指Offer——序列化二叉树
2017-11-03 12:07
274 查看
题目描述:
请实现两个函数,分别用来序列化和反序列化二叉树
分析:
先序遍历可以用来序列化二叉树,序列化过程中,我们用“0xFFFFFFFF”表示结点为NULL。
反序列化便很简单,遇到“0xFFFFFFFF”就返回NULL,其他时候就直接产生一个结点。
代码:
请实现两个函数,分别用来序列化和反序列化二叉树
分析:
先序遍历可以用来序列化二叉树,序列化过程中,我们用“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--序列化二叉树
- 剑指offer——面试题62:序列化二叉树
- 剑指offer 面试题62 序列化和反序列化二叉树
- 剑指offer_二叉树---序列化二叉树
- 剑指offer 编程题(58):序列化二叉树
- 剑指offer--序列化二叉树
- 剑指offer:二叉树的序列化和反序列化
- 剑指offer-二叉树的序列化和反序列化(困惑)-Java
- 剑指Offer--062-序列化二叉树
- 【剑指offer】第三十六题(二叉搜索树与双向链表) 和 第三十七题(序列化二叉树)
- [剑指offer]序列化二叉树
- 剑指offer(五十)之序列化二叉树
- 【剑指Offer学习】【面试题62:序列化二叉树】
- 剑指offer——序列化,反序列化二叉树(好题)
- 剑指Offer-37:序列化二叉树
- 剑指Offer面试题62:序列化二叉树
- 剑指offer:序列化二叉树。
- 剑指offer-序列化二叉树
- 剑指offer 序列化二叉树
- 剑指offer--面试题62:序列化二叉树