设为首页 加入收藏

TOP

LeetCode297:hard级别中最简单的存在,java版,用时击败98%,内存击败百分之九十九(二)
2023-09-23 15:44:47 】 浏览:384
Tags:LeetCode297 hard 别中最 简单的 java 时击败 98% 百分 九十九
TreeNode treeNode = new TreeNode(Integer.valueOf(deserializeArray[deserializeOffset++])); // 2. 左 treeNode.left = deserializeDfs(); // 3. 右 treeNode.right = deserializeDfs(); return treeNode; }
  • 最后贴出完整的代码
public class Codec {

    // 本题的整体思路是前序遍历,即:根左右
    private StringBuilder serializeRes;

    private String[] deserializeArray;

    private int deserializeOffset;

    private void serializeDfs(TreeNode root) {
        if(null==root) {
            serializeRes.append("n,");
            return;
        }

        // 1. 根
        serializeRes.append(root.val).append(",");
        // 2. 左
        serializeDfs(root.left);
        // 3. 右
        serializeDfs(root.right);
    }


    private TreeNode deserializeDfs() {
        if (deserializeOffset>=deserializeArray.length) {
            return null;
        }

        if ("n".equals(deserializeArray[deserializeOffset])) {
            deserializeOffset++;
            return null;
        }

        // 1. 根
        TreeNode treeNode = new TreeNode(Integer.valueOf(deserializeArray[deserializeOffset++]));
        // 2. 左
        treeNode.left = deserializeDfs();
        // 3. 右
        treeNode.right = deserializeDfs();

        return treeNode;
    }


    // Encodes a tree to a single string.
    public String serialize(TreeNode root) {
        if (null==root) {
            return null;
        }
        
        serializeRes = new StringBuilder();
        serializeDfs(root);
        return serializeRes.toString();
    }

    // Decodes your encoded data to tree.
    public TreeNode deserialize(String data) {
        if (null==data) {
            return null;
        }
        
        deserializeArray = data.split(",");
        deserializeOffset = 0;
        return deserializeDfs();
    }
}
  • 提交代码,如下图,顺利AC,速度超97%,同时内存超93%,感觉美滋滋的,这可个是一道hard呀!
    在这里插入图片描述

小幅度优化

  • 回顾此题,似乎还有一丁点优化空间:在序列化的时候,咱们用字符n作为子节点为空的标志,例如
1,2,n,n,3,n,n,
  • 如果用空字符串取代n,那岂不是省掉了一些空间?
  • 说干就干,一共有两处,第一处在序列化的时候,用n做结束标志的那段代码,改动如下图
    在这里插入图片描述
  • 第二处是反序列化的时候,判断是否为n的那段代码,改动如下图
    在这里插入图片描述
  • 改完提交代码,效果如下图,速度和内存都有小幅度优化,第一次距离双百这么近!
    在这里插入图片描述
  • 至此,297的分析和实战已经完成,hard题能如此简单,实属不易遇到,所以不要错误哦,希望本文能给您一些思路,助您用最基础的代码,跑出最耀眼的成绩

欢迎关注博客园:程序员欣宸

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

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇三、若依获取用户角色和权限 下一篇10分钟从实现和使用场景聊聊并发..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目