力扣labuladong一刷day32天二叉树

力扣labuladong一刷day32天二叉树

一、297. 二叉树的序列化与反序列化

题目链接:https://leetcode.cn/problems/serialize-and-deserialize-binary-tree/

思路:关于序列化与反序列化,题目不要求序列化的方式,只要求树经过序列化和反序列化之后依然一样,如果序列化的过程中记录了空节点则只通过前序或者后序就可以完整记录二叉树的信息,可以还原,但中序不可以。

我采用","分割不同节点,"#"表示null。前序遍历拼接字符串进行序列化,反序列化,也是前序遍历,当然需要在进入递归之前new 一个节点,然后把递归的返回值设置为该节点的左右子节点。

java 复制代码
public class Codec {

    StringBuilder builder = new StringBuilder();
    LinkedList<String> list = new LinkedList<>();
    public String serialize(TreeNode root) {
        traverse(root);
        return builder.toString();
    }

    public TreeNode deserialize(String data) {

        String[] split = data.split(",");
        for (String s : split) {
            list.add(s);
        }
        return create();
    }

    void traverse(TreeNode root) {
        if (root == null) {
            builder.append("#,");
            return;
        }
        builder.append(root.val).append(",");
        traverse(root.left);
        traverse(root.right);
    }

    TreeNode create() {
        if (list.isEmpty()) {
            return null;
        }
        String s = list.removeFirst();
        if ("#".equals(s)) return null;
        TreeNode node = new TreeNode(Integer.parseInt(s));
        node.left = create();
        node.right = create();
        return node;
    }
}
相关推荐
遇见尚硅谷16 分钟前
C语言:20250714笔记
c语言·开发语言·数据结构·笔记·算法
Norvyn_741 分钟前
LeetCode|Day11|557. 反转字符串中的单词 III|Python刷题笔记
笔记·python·leetcode
chao_7891 小时前
动态规划题解_零钱兑换【LeetCode】
python·算法·leetcode·动态规划
吃着火锅x唱着歌1 小时前
LeetCode 424.替换后的最长重复字符
linux·算法·leetcode
hans汉斯1 小时前
【计算机科学与应用】面向APT攻击调查的溯源图冗余结构压缩
网络·算法·安全·web安全·yolo·目标检测·图搜索算法
Maybyy1 小时前
力扣454.四数相加Ⅱ
java·算法·leetcode
MicroTech20251 小时前
微算法科技技术创新,将量子图像LSQb算法与量子加密技术相结合,构建更加安全的量子信息隐藏和传输系统
科技·算法·量子计算
cpsvps2 小时前
VR协作海外云:跨国企业沉浸式办公解决方案
windows·架构·vr·etw事件
没学上了2 小时前
Qt轮廓分析设计+算法+避坑
算法
用户9704438781163 小时前
taobao商品详情数据获取实战方法
算法·html