算法总结 - 树 - 序列化

这篇博客总结了序列化和反序列化二叉树及多叉树的方法,包括普通二叉树、搜索二叉树和N-ary树的序列化策略。对于二叉树,介绍了前序遍历和中序遍历的方式;对于多叉树,重点在于如何在字符串中表示节点数量。同时,文章还讨论了如何验证一个给定的前序遍历字符串是否正确表示了一棵二叉树。
摘要由CSDN通过智能技术生成

Serilization(序列化)

1. 二叉树的序列化

1.1 普通二叉树序列化

297. Serialize and Deserialize Binary Tree
Serialization is the process of converting a data structure or object into a sequence of bits so that it can be stored in a file or memory buffer, or transmitted across a network connection link to be reconstructed later in the same or another computer environment.
Design an algorithm to serialize and deserialize a binary tree. There is no restriction on how your serialization/deserialization algorithm should work. You just need to ensure that a binary tree can be serialized to a string and this string can be deserialized to the original tree structure.
Example:
You may serialize the following tree:

    1
   / \
  2   3
     / \
    4   5

as"[1,2,3,null,null,4,5]"
Note: Do not use class member/global/static variables to store states. Your serialize and deserialize algorithms should be stateless.


前序遍历,序列化时将树变成一个字符串,每个节点的值用一个分隔符“,”隔开,null节点用“NN”表示。
反序列化时用递归的方式处理这个字符串。

TC: O(n), SC: O(n)

public class Codec {
   
    private static final String SPLITER = ",";
    private static final String NN = "N";

    // Encodes a tree to a single string.
    public String serialize(TreeNode root) {
   
        // TODO
        StringBuilder builder = new StringBuilder();
        serialHelper(root, builder);
        return builder.toString();
    }

    private void serialHelper(TreeNode root, StringBuilder builder) {
   
        if (root == null) {
   
            builder.append(NN).append(SPLITER);
            return;
        }
        builder.append(root.val).append(SPLITER);
        serialHelper(root.left, builder);
        serialHelper(root.right, builder);
    }

    private int idx;
    // Decodes your encoded data to tree.
    public TreeNode deserialize(String data) {
   
        String[] array = data.split(SPLITER);
        return deserialHelper(array);
    }

    private TreeNode deserialHelper(String[] array) {
   
        if (NN.equals(array[idx])) {
   
            idx++;
            return null;
        }
        TreeNode node = new TreeNode(Integer.parseInt(array[idx++]));
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值