剑指offer:序列化二叉树
题目描述:
请实现两个函数,分别用来序列化和反序列化二叉树
思路分析:
这里一开始有点不明白题目的意思。实际上序列化应该指把二叉树用某种编码方式表示,这里一般是字符串的形式。而反序列就是将之前生成的序列转化成二叉树。
常规的想法里面,编码二叉树无非就是前序、中序、后序或是层次,但是我们都直到前序遍历加上中序遍历才能确定一颗二叉树,所以需要引入一些额外的信息,对于空的指针有表示。
下面的代码当中,是利用了前序遍历来序列化二叉树,其中对于空指针用‘#'表示,且每个结点后会用','隔开。注意二叉树的值为整数,可能包含多位,因此转化为二叉树时,需要将字符串转化为整型。
代码:
/*
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:序列化二叉树的更多相关文章
- 剑指Offer——序列化二叉树
题目描述: 请实现两个函数,分别用来序列化和反序列化二叉树 分析: 先序遍历可以用来序列化二叉树,序列化过程中,我们用“0xFFFFFFFF”表示结点为NULL. 反序列化便很简单,遇到“0xFFFF ...
- 《剑指offer》 二叉树的镜像
本题来自<剑指offer>二叉树的镜像 题目: 操作给定的二叉树,将其变换为源二叉树的镜像. 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 ...
- 剑指Offer:二叉树打印成多行【23】
剑指Offer:二叉树打印成多行[23] 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 题目分析 Java题解 package tree; import java.uti ...
- 剑指Offer:二叉树中和为某一值的路径【34】
剑指Offer:二叉树中和为某一值的路径[34] 题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. ...
- 剑指 Offer 34. 二叉树中和为某一值的路径 + 记录所有路径
剑指 Offer 34. 二叉树中和为某一值的路径 Offer_34 题目详情 题解分析 本题是二叉树相关的题目,但是又和路径记录相关. 在记录路径时,可以使用一个栈来存储一条符合的路径,在回溯时将进 ...
- 剑指 Offer 34. 二叉树中和为某一值的路径
剑指 Offer 34. 二叉树中和为某一值的路径 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径.从树的根节点开始往下一直到叶节点所经过的节点形成一条路径. 示例: 给定如下 ...
- 力扣 - 剑指 Offer 27. 二叉树的镜像
题目 剑指 Offer 27. 二叉树的镜像 思路1(递归) 我们可以使用深度优先搜索,先递归到链表的末尾,然后从末尾开始两两交换.就相当于后续遍历而已 记得要先保存下来node.right节点,因为 ...
- 【剑指Offer】二叉树的镜像 解题报告(Python)
[剑指Offer]二叉树的镜像 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题 ...
- 【剑指Offer】二叉树中和为某一值的路径 解题报告(Python)
[剑指Offer]二叉树中和为某一值的路径 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-intervi ...
- 【剑指Offer】二叉树的下一个结点 解题报告(Python)
[剑指Offer]二叉树的下一个结点 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...
随机推荐
- English--动词时态
English|动词时态 时态是一个很玄乎的东西,要么是完全掌握,要么是不知所云. 在正式开始之前,大家需要明白汉语的谓语动词是不会随着时间与状态而变化.但是,英语的谓语动词会随着时间与状态发生变化. ...
- JavaScript 数组(二)数组练习
1.求一组数中的最大值和最小值,以及所在位置(最大值和最小值在这组数中的位置) var numbers = [120, 13, 101, 88, 10, 25]; var max = numbers[ ...
- vm-install 模版创建虚拟机
主要用到的信息有:模版id和存储id 通过存储名字 # xe vm-install template=[template_uuid] new-name-label="name" s ...
- Golang报错:Cannot convert expression of type interface{} to type []byte
在使用golang实现后端登录逻辑的时候,碰到下面的问题:Cannot convert expression of type interface{} to type []byte 首先介绍下问题出现的 ...
- Nginx学习(二)
------------恢复内容开始------------ Nginx配置文件 主配置文件结构:四部分 main block:主配置段,既全局配置段,对Http,mail都有效 event{ }事件 ...
- day 28
目录 操作系统发展史 穿孔卡片 联机批处理系统 脱机批处理系统 多道技术(基于单核情况下研究) 单道 多道技术 并发与并行 进程 程序与进程 进程调度 先来先服务调度 短作业优先调度 时间片轮转法 分 ...
- Request和Response。
复习点:1.重定向问题 2.输出字符串到浏览器.3.文件下载需求:1. 页面显示超链接2. 点击超链接后弹出下载提示框3. 完成图片文件下载 Request和Response Request: 1. ...
- Top命令数据分析
一.top命令详解 当前时间 20:27:12 当前系统运行时间 3:18秒 1个用户 系统负载平均长度为 0.00,0.00,0.00(分别为1分钟.5分钟.15分钟前到现在的平均值) 第二行为进程 ...
- Linux下设置Nginx开机自启
1.本地环境 [root@dev ~]#cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) 2.在/etc/init.d创建ngi ...
- backtrace() returns only one stack frame
参考: 在Linux中如何利用backtrace信息解决程序崩溃的问题 linux 打印堆栈方法 https://devtalk.nvidia.com/default/topic/987279/jet ...