剑指offer(C++)——序列化二叉树
来源:互联网 发布:ddos压力测试源码 编辑:程序博客网 时间:2024/06/14 11:28
题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
解释:序列化的意思是指将一些特定的数据结构,变成有格式信息的字符串。例如对一个链表,可以将1->2->3->4->NULL序列化为"1,2,3,4"。对于序列化算法,必须支持反序列化,即在约定的格式下,可以将满足格式要求的字符串重新构造为原始的结构形式。
二叉树序列化
我们以前序遍历的顺序进行序列化,对于空结点我们用一个特殊的符号‘$’来代替,则序列化后的字符串为“1,2,4,$,$,5,$,$,3,6,$,$,7,$,$”
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) {if (root == NULL)return NULL;string str;serialize(root, str);char* buffer = new char[str.size() + 1]; strcpy(buffer, str.c_str()); //将string类型的字符串转换成C_style类型并复制到一个char类型数组return buffer;}void serialize(TreeNode* root, string& str){if (root == NULL){str += "$,"; //叶子结点的左右子结点为空则用 $ 来代替return;}str += to_string(root->val); //将结点值(int)转换成字符串(string)类型str += ',';serialize(root->left, str); //递归序列化结点的左子树serialize(root->right, str); //递归序列化结点的右子树}/*========================二叉树反序列化============================*/TreeNode* Deserialize(char *str) {if (str == NULL)return NULL;return deserialize(&str);}TreeNode* deserialize(char** str){if (**str == '$'){(*str) += 2;return NULL;}int val = 0;while (**str != ','&&**str != '\0') //把字符串类型的数字转换成int类型的数字{val = val * 10 + (**str - '0');++(*str);}TreeNode* root = new TreeNode(val); //构建根结点if (**str == '\0')return root;else++(*str);root->left = deserialize(str); //递归的构建左子树结点root->right = deserialize(str); //递归的构建右子树结点return root;}};
1 0
- 剑指offer(C++)——序列化二叉树
- 剑指offer—序列化二叉树
- 剑指offer—序列化二叉树
- 剑指Offer——序列化二叉树
- 剑指offer——序列化二叉树
- 剑指offer——序列化二叉树___
- 剑指offer——61.序列化二叉树
- 剑指offer——序列化,反序列化二叉树(好题)
- 剑指offer--序列化二叉树
- 《剑指offer》序列化二叉树
- [剑指offer]序列化二叉树
- 《剑指offer》:[62]序列化二叉树
- 剑指Offer--062-序列化二叉树
- 剑指offer-序列化二叉树
- 剑指offer 序列化二叉树
- 【剑指Offer】序列化二叉树
- 剑指offer 序列化二叉树
- 16.剑指offer-序列化二叉树
- 面试系列----谈谈你对android多线程的理解
- iOS --- 关于block的常见使用方法(OC)
- centos6 yum安装docker
- 雪城大学信息安全讲义 3.2 Set-UID 程序的漏洞
- week10- Dynamic Programming-NO.343. Integer Break
- 剑指offer(C++)——序列化二叉树
- java知识点转载
- 斐波那契数--递归和非递归实现
- Python 拓展库安装问题
- 浅谈android mvc、mvp架构思想
- Android代码规范指北
- ios 设置导航titleView偏移问题
- UE4如何检测目标在锥形视野内
- 基于MyCat实现的MySQL读写分离