LeetCode297:hard级别中最简单的存在,java版,用时击败98%,内存击败百分 ...

打印 上一主题 下一主题

主题 925|帖子 925|积分 2775

本篇概览


  • 因为欣宸个人水平有限,在刷题时一直不敢面对hard级别的题目,生怕出现一杯茶一包烟,一道hard做一天的窘境

  • 这种恐惧心理一直在,直到遇见了它:LeetCode297,建议不敢做hard题的新手们速来围观,拿它练手,轻松找到自信
题目简介



    • 二叉树的序列化与反序列化

  1. 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。
  2. 请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。
  3. 提示: 输入输出格式与 LeetCode 目前使用的方式一致,详情请参阅 LeetCode 序列化二叉树的格式。你并非必须采取这种方式,你也可以采用其他的方法解决这个问题。
复制代码

  • 提示
  1. 提示:
  2. 树中结点数在范围 [0, 104] 内
  3. -1000 <= Node.val <= 1000
复制代码

  • 提交代码,如下图,顺利AC,速度超97%,同时内存超93%,感觉美滋滋的,这可个是一道hard呀!

小幅度优化


  • 回顾此题,似乎还有一丁点优化空间:在序列化的时候,咱们用字符n作为子节点为空的标志,例如
  1. private void dfs(TreeNode root) {
  2.   // 终止条件是发现入参为空
  3.   if(null==root) {
  4.     return;
  5.   }
  6.   
  7.   // 1. 根
  8.   处理root的代码
  9.   // 2. 左
  10.   dfs(root.left);
  11.   // 3. 右
  12.   dfs(root.right);
  13. }
复制代码

  • 如果用空字符串取代n,那岂不是省掉了一些空间?
  • 说干就干,一共有两处,第一处在序列化的时候,用n做结束标志的那段代码,改动如下图

  • 第二处是反序列化的时候,判断是否为n的那段代码,改动如下图

  • 改完提交代码,效果如下图,速度和内存都有小幅度优化,第一次距离双百这么近!

  • 至此,297的分析和实战已经完成,hard题能如此简单,实属不易遇到,所以不要错误哦,希望本文能给您一些思路,助您用最基础的代码,跑出最耀眼的成绩
欢迎关注博客园:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立山

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表