剑指offer 序列化二叉树
2017-02-22 23:12
387 查看
请实现两个函数,分别用来序列化和反序列化二叉树。
思路:主要是区分空节点,val之间用特殊符号隔开,例如用 ‘-’表示节点分隔符,当遇到空节点时用#表示,按层遍历即可,当然也可以用其他遍历方式 。磕磕绊绊也算是AC了。
思路:主要是区分空节点,val之间用特殊符号隔开,例如用 ‘-’表示节点分隔符,当遇到空节点时用#表示,按层遍历即可,当然也可以用其他遍历方式 。磕磕绊绊也算是AC了。
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; */ class Solution { public: char* Serialize(TreeNode *root) { string str=""; stringstream st; if(root==NULL) return ""; queueque; que.push(root); TreeNode *p; st<val; str+="-"+st.str(); st.str(""); while(!que.empty()) { p = que.front(); que.pop(); if(p->left) { que.push(p->left); st<<(p->left->val); str+="-"+st.str(); st.str(""); } else { str+="-#"; } if(p->right) { que.push(p->right); st<<(p->right->val); str+="-"+st.str(); st.str(""); } else { str+="-#"; } } char *res = new char [strlen(str.c_str())+1]; strcpy(res,str.c_str()); return res; } TreeNode* Deserialize(char *str) { if(strlen(str)==0) return NULL; int count = strlen(str); int i=1,pre=0,next=0; int sum =0; queueque; while(str[i]!='-'&&str[i]!='#') { sum=sum*10+(str[i]-'0'); i++; } i++; TreeNode *root = new TreeNode(sum); TreeNode *p; que.push(root); while(!que.empty()&&ileft=NULL; i=i+2; } else { sum =0; while(str[i]!='-') { sum=sum*10+(str[i]-'0'); i++; } TreeNode *node = new TreeNode(sum); p->left = node; que.push(node); i++; } if(str[i]=='#') { p->right = NULL; i=i+2; } else { sum =0; while(str[i]!='-') { sum=sum*10+(str[i]-'0'); i++; } TreeNode *node = new TreeNode(sum); p->right = node; que.push(node); i++; } } return root; } };
相关文章推荐
- 剑指offer 编程题(58):序列化二叉树
- 剑指Offer面试题62:序列化二叉树
- 剑指offer--序列化二叉树
- 剑指offer 面试题62 序列化和反序列化二叉树
- 剑指offer:二叉树的序列化和反序列化
- 剑指offer-序列化二叉树
- 剑指Offer--062-序列化二叉树
- 剑指offer--面试题62:序列化二叉树
- 【剑指Offer】序列化二叉树
- 【剑指offer】第三十六题(二叉搜索树与双向链表) 和 第三十七题(序列化二叉树)
- 剑指offer_二叉树---序列化二叉树
- 剑指offer 序列化二叉树
- [剑指offer]序列化二叉树
- 剑指offer(五十)之序列化二叉树
- 剑指offer--序列化二叉树
- 剑指Offer-37:序列化二叉树
- 剑指offer——序列化,反序列化二叉树(好题)
- 剑指offer:序列化二叉树。
- 【剑指Offer学习】【面试题62:序列化二叉树】
- 剑指Offer_61_序列化二叉树