力扣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;
    }
}
相关推荐
立志成为大牛的小牛几秒前
数据结构——二十九、图的广度优先遍历(BFS)(王道408)
数据结构·数据库·学习·程序人生·考研·算法·宽度优先
Alex艾力的IT数字空间2 分钟前
基于PyTorch和CuPy的GPU并行化遗传算法实现
数据结构·人工智能·pytorch·python·深度学习·算法·机器学习
仰泳的熊猫13 分钟前
LeetCode:51. N 皇后
数据结构·c++·算法·leetcode
独自破碎E15 分钟前
LeetCode 381: O(1) 时间插入、删除和获取随机元素 - 允许重复
java·算法·leetcode
Miraitowa_cheems40 分钟前
LeetCode算法日记 - Day 81: 最大子数组和
java·数据结构·算法·leetcode·决策树·职场和发展·深度优先
冯诺依曼的锦鲤1 小时前
算法练习:前缀和专题
开发语言·c++·算法
闭着眼睛学算法1 小时前
【双机位A卷】华为OD笔试之【哈希表】双机位A-跳房子I【Py/Java/C++/C/JS/Go六种语言】【欧弟算法】全网注释最详细分类最全的华子OD真题题解
java·c语言·c++·python·算法·华为od·散列表
开发者驿站2 小时前
2025年保姆级C++环境配置教程(Windows/macOS双平台)
c++·windows·macos
自信150413057592 小时前
初学者小白复盘15之指针(4)
c语言·数据结构·算法
郝学胜-神的一滴2 小时前
Cesium绘制线:从基础到高级技巧
前端·javascript·程序人生·线性代数·算法·矩阵·图形渲染