题目描述:

请实现两个函数,分别用来序列化和反序列化二叉树

思路分析:

这里一开始有点不明白题目的意思。实际上序列化应该指把二叉树用某种编码方式表示,这里一般是字符串的形式。而反序列就是将之前生成的序列转化成二叉树。

常规的想法里面,编码二叉树无非就是前序、中序、后序或是层次,但是我们都直到前序遍历加上中序遍历才能确定一颗二叉树,所以需要引入一些额外的信息,对于空的指针有表示。

下面的代码当中,是利用了前序遍历来序列化二叉树,其中对于空指针用‘#'表示,且每个结点后会用','隔开。注意二叉树的值为整数,可能包含多位,因此转化为二叉树时,需要将字符串转化为整型。

代码:

 /*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
void SerializeCore(TreeNode* root, string &str)
{
if(!root)
{
str += '#';
return;
}
string tmp = to_string(root->val);
tmp += ',';
str += tmp;
SerializeCore(root->left, str);
SerializeCore(root->right, str);
}
char* Serialize(TreeNode *root) {
if(!root)
return nullptr;
string str;
SerializeCore(root, str);
int len = str.length();
char* res = new char[len+];
for(int i=; i<str.length(); i++)
{
res[i] = str[i];
}
res[len] = '\0';
return res; }
TreeNode* DeserializeCore(char **str)
{
if(**str == '#')
{
(*str)++;
return nullptr;
} // 这里注意的是整数用了字符串做表示,一个字符仅表示一位,因此首先要进行转化
int num=;
while(**str != ',' && **str != '\0')
{
num = num* + ((**str) - '');
(*str)++;
}
TreeNode* root = new TreeNode(num);
if(**str == '\0')
return root;
else
(*str)++;
root->left = DeserializeCore(str);
root->right = DeserializeCore(str);
return root;
} TreeNode* Deserialize(char *str) {
if(!str)
return nullptr;
TreeNode* res = DeserializeCore(&str);
return res;
}
};

剑指offer:序列化二叉树的更多相关文章

  1. 剑指Offer——序列化二叉树

    题目描述: 请实现两个函数,分别用来序列化和反序列化二叉树 分析: 先序遍历可以用来序列化二叉树,序列化过程中,我们用“0xFFFFFFFF”表示结点为NULL. 反序列化便很简单,遇到“0xFFFF ...

  2. 《剑指offer》 二叉树的镜像

    本题来自<剑指offer>二叉树的镜像 题目: 操作给定的二叉树,将其变换为源二叉树的镜像. 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 ...

  3. 剑指Offer:二叉树打印成多行【23】

    剑指Offer:二叉树打印成多行[23] 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 题目分析 Java题解 package tree; import java.uti ...

  4. 剑指Offer:二叉树中和为某一值的路径【34】

    剑指Offer:二叉树中和为某一值的路径[34] 题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. ...

  5. 剑指 Offer 34. 二叉树中和为某一值的路径 + 记录所有路径

    剑指 Offer 34. 二叉树中和为某一值的路径 Offer_34 题目详情 题解分析 本题是二叉树相关的题目,但是又和路径记录相关. 在记录路径时,可以使用一个栈来存储一条符合的路径,在回溯时将进 ...

  6. 剑指 Offer 34. 二叉树中和为某一值的路径

    剑指 Offer 34. 二叉树中和为某一值的路径 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径.从树的根节点开始往下一直到叶节点所经过的节点形成一条路径. 示例: 给定如下 ...

  7. 力扣 - 剑指 Offer 27. 二叉树的镜像

    题目 剑指 Offer 27. 二叉树的镜像 思路1(递归) 我们可以使用深度优先搜索,先递归到链表的末尾,然后从末尾开始两两交换.就相当于后续遍历而已 记得要先保存下来node.right节点,因为 ...

  8. 【剑指Offer】二叉树的镜像 解题报告(Python)

    [剑指Offer]二叉树的镜像 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题 ...

  9. 【剑指Offer】二叉树中和为某一值的路径 解题报告(Python)

    [剑指Offer]二叉树中和为某一值的路径 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-intervi ...

  10. 【剑指Offer】二叉树的下一个结点 解题报告(Python)

    [剑指Offer]二叉树的下一个结点 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...

随机推荐

  1. js浏览器对象模型【BOM】(十三)

    一.时间定时器1.超时调用setTimeout(fun,time)    [返回一个唯一标识该超时调用的ID数值]参数:fun:要执行的函数time:设置第多少毫秒后执行fun函数 clearTime ...

  2. js学习之数据结构和算法

    js中的数据结构 1.列表 待办事项列表.购物清单.最佳十名榜单等等. 适用: 1)数据结构较为简单, 2)不需要在一个长序列中查找元素,或者对其进行排序 2.栈 一摞盘子 ----- 添加删除只能从 ...

  3. CentOS 7 - 安装Python 3

    Enable Software Collections (SCL) Software Collections, also known as SCL is a community project tha ...

  4. win10 LTSC系统 安装应用商店和纸牌合集,解决从应用商店安装Solitaire Collection纸牌打开空白的问题

    家里台式机换了win10系统,想给老妈玩那个纸牌游戏(我也超喜欢的!. 发现这个系统没有自带纸牌游戏Microsoft Solitaire Collection, 过分的是,连应用商店都没有...呵呵 ...

  5. C#实体类与XML相互转换

    1.实体类与XML相互转换 将实体类转换成XML需要使用XmlSerializer类的Serialize方法,将实体类序列化. 把XML转换成相应的实体类,需要使用到XmlSerializer类的De ...

  6. SQL血的教训

    1.    每次查询的数据要有限制     2013年1月  产品独立数据库,由于多条SQL每次查询数据超过几千条,有些超过10万条数据未分页,造成应用服务器CPU有时持续100%. 2.    禁止 ...

  7. P4281 [AHOI2008]紧急集合 / 聚会[LCA]

    解析 蒟蒻用的办法比较蠢,不如上面的各位大佬,直接化成一个式子了,我还是分类讨论做的. 下面正文. 猜想:最优集合点一定是三点任意两对点对应的路径的交点. 不妨这样想,如果任意两个人经过同一条路径,那 ...

  8. 【Hadoop】新建hadoop用户以及用户组,给予sudo权限(转)

    1.首先新建用户,adduser命令 sudo adduser hadoop passwd hadoop 输入密码之后,一路 y 确定. 2.添加用户组 在创建hadoop用户的同时也创建了hadoo ...

  9. Linux 防火墙 | Linux 服务器如何开放端口 配置防火墙

    sudo ufw status(如果你是root,则去掉sudo,ufw status)可检查防火墙的状态,我的返回的是:inactive(默认为不活动).sudo ufw version防火墙版本: ...

  10. First-class function

    https://en.wikipedia.org/wiki/First-class_function In computer science, a programming language is sa ...