部署DeepSeek模型,进群交流最in玩法!
立即加群
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >LintCode-7二叉树的序列化和反序列化

LintCode-7二叉树的序列化和反序列化

作者头像
悠扬前奏
发布于 2019-05-28 12:32:48
发布于 2019-05-28 12:32:48
62600
代码可运行
举报
运行总次数:0
代码可运行

题目

描述

设计一个算法,并编写代码来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”。

如何反序列化或序列化二叉树是没有限制的,你只需要确保可以将二叉树序列化为一个字符串,并且可以将字符串反序列化为原来的树结构。

样例

给出一个测试数据样例, 二叉树{3,9,20,#,#,15,7},表示如下的树结构:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  3
 / \
9  20
  /  \
 15   7

我们的数据是进行BFS遍历得到的。当你测试结果wrong answer时,你可以作为输入调试你的代码。

你可以采用其他的方法进行序列化和反序列化。

解答

思路

基础题。 开始忘了Queue类。手动写字符串数组“弹出”的功能,很麻烦。查到Queue类就能很好的解决这个问题了。

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * Definition of TreeNode:
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left, right;
 *     public TreeNode(int val) {
 *         this.val = val;
 *         this.left = this.right = null;
 *     }
 * }
 */
class Solution {
    /**
     * This method will be invoked first, you should design your own algorithm 
     * to serialize a binary tree which denote by a root node to a string which
     * can be easily deserialized by your own "deserialize" method later.
     */
    public String serialize(TreeNode root) {
        // write your code here
        // 若根节点为空,返回“#,”
        if(root == null)
            return "#,";
        // 新建StringBudffer,存储节点值
        StringBuffer sb = new StringBuffer(root.val+",");
        // 递归左子树
        sb.append(serialize(root.left));
        // 递归右子树
        sb.append(serialize(root.right));
        // 返回StringBuffer的字符串值
        return sb.toString();
    }
    
    /**
     * This method will be invoked second, the argument data is what exactly
     * you serialized at method "serialize", that means the data is not given by
     * system, it's given by your own serialize method. So the format of data is
     * designed by yourself, and deserialize it here as you serialize it in 
     * "serialize" method.
     */
    public TreeNode deserialize(String data) {
        // write your code here
        // 将在字符串按照','拆开成字符串数组
        String[] ss = data.split(",");
        // 用字符串数组构建字符串队列
        Queue<String> q = new LinkedList<String>();
        for(int i = 0; i < ss.length; i++){
            q.add(ss[i]);
        }
        // 递归生成二叉树
        return preOrder(q);
    }
    
    private TreeNode preOrder(Queue<String> q){
        // “弹出”队列下一个字符串
        String val = q.poll();
        // 如果值为'#'说明是空结点
        if(val.equals("#")) return null;
        // 如果值不为'#',用该值的整型值构建节点
        TreeNode node = new TreeNode(Integer.valueOf(val));
        // 遍历构建节点左子树
        node.left = preOrder(q);
        // 遍历构建节点右子树
        node.right = preOrder(q);
        // 返回节点
        return node;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.07.18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
性能测试必备知识(4)- 使用 stress 和 sysstat 分析平均负载过高的场景
--vm-bytes B 指定 malloc() 时内存的字节数,默认256MB --vm-hang N 指定执行 free() 前等待的秒数 -d N、 --hdd N
小菠萝测试笔记
2020/07/21
2.1K0
性能测试必备知识(4)- 使用 stress 和 sysstat 分析平均负载过高的场景
如何理解系统平均负载值(一)
每当我们发现系统变慢时,通常做的第一件事,就是执行top或者uptime命令,来了解系统的负载情况。比如下面这样,我在命令行里输入了uptime命令,系统也随即给出了结果。
全栈程序员站长
2022/09/06
9040
linux性能优化学习笔记-pidstat
平均负载跟cpu有很大关系, 比如我们的系统为2个cpu,那么平均负载2 表示两个cpu全部占满。 我们的平均负载1分钟内为0.02,可以简单先理解为每个cpu占用了1%。
用户2825413
2019/07/15
8170
系统的load average
可运行状态进程:可以理解为系统内正在占用CPU或正在等待CPU的进程,也就是处于R状态的进程
程哲
2021/12/10
5900
性能分析之Linux系统平均负载案例分析
在上文性能基础之理解Linux系统平均负载和CPU使用率,我们详细介绍了 Linux 系统平均负载的相关概念,本文我们来做几个案例分析,以便于加深理解。
高楼Zee
2019/07/17
1.5K0
性能分析之Linux系统平均负载案例分析
CPU测试工具
使用stress-ng是一个 Linux 系统压力测试工具,模拟进程平均负载升高的场景。
陈不成i
2021/05/24
3.4K0
​Linux CPU 性能优化指南
本文作者:allenxguo,腾讯 QQ 音乐后台开发工程师 本文主要帮助理解 CPU 相关的性能指标,常见的 CPU 性能问题以及解决方案梳理。 系统平均负载 简介 系统平均负载:是处于可运行或不可中断状态的平均进程数。 可运行进程:使用 CPU 或等待使用 CPU 的进程 不可中断状态进程:正在等待某些 IO 访问,一般是和硬件交互,不可被打断(不可被打断的原因是为了保护系统数据一致,防止数据读取错误) 查看系统平均负载 首先top命令查看进程运行状态,如下: PID USER
腾讯技术工程官方号
2020/08/11
8.8K0
什么是平均负载?
分别表示: 当前时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。
袁新栋-jeff.yuan
2020/08/26
9550
从入门到转型之Linux性能优化实践学习指南
本系列是从入门到转型之Linux性能优化实践学习指南,是博主学习Linux性能优化之路的精华版本,我将分享大量性能优化的思路和方法,并进行相应工具使用介绍和总结。
全栈工程师修炼指南
2022/09/29
6160
从入门到转型之Linux性能优化实践学习指南
从平均负载开始,这进程是 CPU Bound 还是 IO Bound 的?
在排查性能问题的时候,我们经常会使用 top 或者 uptime 两个 Linux 命令,top 命令和 uptime 命令都会给出最近机器 1 min,5 min,15 min 的平均负载情况,一般平均负载值(Average Load)接近甚至超出 CPU cores (现在一般指 processors 的个数, 现在 CPU 的一个 core 一般有两个 processor, 可以处理两个进程) 时,系统会有性能瓶颈.
Cloud-Cloudys
2023/10/21
3030
从平均负载开始,这进程是 CPU Bound 还是 IO Bound 的?
Linux性能优化实战 笔记
平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系。
OwenZhang
2021/12/08
1.8K0
Linux性能优化实战 笔记
性能分析(3)- 短时进程导致用户 CPU 使用率过高案例
并发 100 个请求测试 VM1 的 Nginx 性能,总共测试 1000 个请求
小菠萝测试笔记
2020/08/11
1.5K0
性能分析(3)- 短时进程导致用户 CPU 使用率过高案例
Linux stress命令详解
stress 命令主要用来模拟系统负载较高时的场景,本文介绍其基本用法。文中 demo 的演示环境为 ubuntu 18.04。
JavaEdge
2021/02/23
3.4K0
Linux stress命令详解
一秒内诊断 Linux 服务器的性能
60,000 毫秒内对 Linux 的性能诊断 当你为了解决一个性能问题登录到一台 Linux 服务器:在第一分钟你应该检查些什么? 在 Netflix,我们有一个巨大的 EC2 Linux 云,以及大量的性能分析工具来监控和诊断其性能。其中包括用于云监控的 Atlas,以及用于按需实例分析的 Vector。虽然这些工具可以帮助我们解决大多数问题,但我们有时仍需要登录到一个服务器实例,并运行一些标准 Linux 性能工具。 在这篇文章中,Netflix Performance Engineering 团
小小科
2018/05/04
1.5K0
一秒内诊断 Linux 服务器的性能
第十五章·Linux系统管理-进程管理
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
1.1K0
第十五章·Linux系统管理-进程管理
linux性能优化心得
本文以 极客时间 倪鹏飞老师的专栏为基础进行的编写心得、由于本人水平有限,如果有什么不妥的地方,还请各位批评指正。
怀朔
2022/05/25
8840
Linux 性能优化的全景指南,可能都在这里了,建议收藏~
性能问题的本质就是系统资源已经到达瓶颈,但请求的处理还不够快,无法支撑更多的请求。性能分析实际上就是找出应用或系统的瓶颈,设法去避免或缓解它们。
用户6543014
2022/03/04
2.7K0
Linux 性能优化的全景指南,可能都在这里了,建议收藏~
如何分析系统平均负载过高的原因_线上cpu负载过高如何排查
我相信你应该用过uptime命令查询系统负载的情况,或者在各种监控终端上看到过系统load这一项,但是每次问别人到底什么是系统load?系统load到达多少算过高?又有哪些原因会造成系统load过载?我发现很少有人能回答清楚,大多数都觉得系统load过载就表示CPU使用率过载、然而实际上并不完全这样的,本文就来仔细分析一下到底有哪些原因会造成系统load过载!
全栈程序员站长
2022/09/30
2.5K0
如何分析系统平均负载过高的原因_线上cpu负载过高如何排查
相关推荐
性能测试必备知识(4)- 使用 stress 和 sysstat 分析平均负载过高的场景
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验