剑指Offer-61.序列化二叉树(C++/Java)
题目:
二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树。
分析:
这道题会先调序列化函数,然后再根据序列化生成的结果调用反序列化函数,最后和原始输入来对比,所以使用哪种遍历方式都可以,在这里我们使用前序遍历,因为这样序列化得到的结果,最开始就是树的根节点。
C++使用vector来存储节点的值,空指针使用0xFFFFFFFF来表示,在反序列化时遇到0xFFFFFFFF,就可以直接跳过了。
程序:
C++
class Solution {
public:
char* Serialize(TreeNode *root) {
Dlr(root);
int *res = new int[a.size()];
for(int i = 0;i < a.size(); i++)
res[i] = a[i];
return (char*)res;
}
TreeNode* Deserialize(char *str) {
int *p = (int*) str;
return helper(p);
}
TreeNode* helper(int *&str) {
if(*str == 0xFFFFFFFF){
str++;
return nullptr;
}
TreeNode* res = new TreeNode(*str);
str++;
res->left = helper(str);
res->right = helper(str);
return res;
}
void Dlr(TreeNode *root){
if(root == nullptr){
a.push_back(0xFFFFFFFF);
return;
}
a.push_back(root->val);
Dlr(root->left);
Dlr(root->right);
}
private:
vector<int> a;
};
Java
public class Solution {
String Serialize(TreeNode root) {
if(root == null)
return "";
StringBuilder sb = new StringBuilder();
SerializeHelper(root);
return string.toString();
}
void SerializeHelper(TreeNode root) {
if(root == null) {
string.append("#,");
return;
}
string.append(root.val);
string.append(',');
SerializeHelper(root.left);
SerializeHelper(root.right);
}
TreeNode Deserialize(String str) {
if(str.length() == 0)
return null;
String[] strs = str.split(",");
return DeserializeHelper(strs);
}
TreeNode DeserializeHelper(String[] strs) {
if(strs[index].equals("#")){
index++;
return null;
}
TreeNode root = new TreeNode(Integer.parseInt(strs[index]));
index++;
root.left = DeserializeHelper(strs);
root.right = DeserializeHelper(strs);
return root;
}
private StringBuilder string = new StringBuilder();
private int index = 0;
}
剑指Offer-61.序列化二叉树(C++/Java)的更多相关文章
- 剑指Offer 61. 序列化二叉树 (二叉树)
题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 题目地址 https://www.nowcoder.com/practice/cf7e25aa97c04cc1a68c8f040e71fb84 ...
- [剑指Offer] 61.序列化二叉树
题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *r ...
- 剑指 Offer 37. 序列化二叉树 + 二叉树的层次遍历
剑指 Offer 37. 序列化二叉树 Offer_37 题目描述 题目解析 本题主要考察的就是二叉树的层次遍历. 层次遍历时可以根据二叉树的特点将空结点也进栈. 反序列化时同样可以根据层次遍历的思路 ...
- 力扣 - 剑指 Offer 37. 序列化二叉树
目录 题目 思路 代码 复杂度分析 题目 剑指 Offer 37. 序列化二叉树 思路 序列化其实就是层序遍历 但是,要能反序列化的话,前.中.后.层序遍历是不够的,必须在序列化时候保存所有信息,这样 ...
- 【剑指Offer】序列化二叉树 解题报告(Python)
[剑指Offer]序列化二叉树 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目 ...
- 【Java】 剑指offer(37) 序列化二叉树
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 请实现两个函数,分别用来序列化和反序列化二叉树. 思路 一般情况下 ...
- Go语言实现:【剑指offer】序列化二叉树
该题目来源于牛客网<剑指offer>专题. 请实现两个函数,分别用来序列化和反序列化二叉树. 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建 ...
- 剑指offer:序列化二叉树
题目描述: 请实现两个函数,分别用来序列化和反序列化二叉树 思路分析: 这里一开始有点不明白题目的意思.实际上序列化应该指把二叉树用某种编码方式表示,这里一般是字符串的形式.而反序列就是将之前生成的序 ...
- 每日一题 - 剑指 Offer 37. 序列化二叉树
题目信息 时间: 2019-06-29 题目链接:Leetcode tag:序列化 二叉树 队列 难易程度:中等 题目描述: 请实现两个函数,分别用来序列化和反序列化二叉树. 示例: 1 / \ 2 ...
- 剑指offer——31序列化二叉树
题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存.序列化可以基于先 ...
随机推荐
- 关于console.log中this指向的问题
- 分类算法(Classification Algorithm)需求记录
[toc] 比如说,在WEB扫描器场景中.一个扫描器在扫描过程中,它可以自动识别接口类型并采用相应分类规则进行漏洞检测的算法,这种通常属于一种称为"智能扫描"(Intelligen ...
- 剑指offer11(Java)-旋转数组中的最小值(简单)
题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行了一次旋转.请返回旋转数 ...
- java应用提速(速度与激情)
简介: 本文将阐述通过基础设施与工具的改进,实现从构建到启动全方面大幅提速的实践和理论. 作者 | 阿里巴巴CTO技术来源 | 阿里开发者公众号 联合作者:道延 微波 沈陵 梁希 大熊 断岭 北纬 未 ...
- 阿里云张献涛:自主最强DPU神龙的秘诀
简介:读懂云计算,才能看清DPU热潮. 微信公众号搜索"弹性计算百晓生",获取更多云计算知识. 如果细数最近火爆的科技概念,DPU必然位列其中. 这是英伟达一手捧红的新造富故事, ...
- 如何构建企业出海的"免疫力"?深入解读阿里云CDN安全能力
简介: 随着信息技术快速发展与应用,产业数字化和智能化趋势正日益加深,企业信息安全与防护被提升到前所有未有的高度.阿里云CDN经过10多年的技术发展时间,已逐步构筑一个边缘+云的安全网络立体防护体系, ...
- 浅谈 Linux 高负载的系统化分析
简介: 浅谈 Linux 高负载的系统化分析,阿里云系统组工程师杨勇通过对线上各种问题的系统化分析. 讲解 Linux Load 高如何排查的话题属于老生常谈了,但多数文章只是聚焦了几个点,缺少整体 ...
- docker镜像仓库搭建-Harbor
一.Harbor简介 Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器. 作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能和安全.提升用户使用 ...
- STM32 USART串口通信
一.介绍 通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换.USART利用分数波特率发生器提供宽范围的波特率选择.它支持同步单向 ...
- vue项目(cli-3)替换浏览器logo
思路: 根html文件的 <link rel="icon" href="<%= BASE_URL %>favicon.ico">是引入i ...