剑指Offer Java版 面试题37:序列化二叉树

题目:请实现两个函数,分别用来序列化和反序列化二叉树。可以根据前序遍历的顺序来序列化二叉树。在遍历二叉树碰到null时,这些null序列化为一个特殊字符'$'。另外,节点的数值之间要用一个特殊字符','隔开。

练习地址

https://www.nowcoder.com/practice/cf7e25aa97c04cc1a68c8f040e71fb84
https://leetcode-cn.com/problems/xu-lie-hua-er-cha-shu-lcof/

参考答案

/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {
    String Serialize(TreeNode root) {
        String result = serialize(root);
        return result.substring(0, result.length() - 1);
    }
    
    private String serialize(TreeNode node) {
        if (node == null) {
            return "$,";
        }
        StringBuilder result = new StringBuilder(node.val + ",");
        result.append(serialize(node.left));
        result.append(serialize(node.right));
        return result.toString();
    }
    
    private int mIndex;
    
    TreeNode Deserialize(String str) {
        if (str == null || str.length() == 0) {
            return null;
        }
        mIndex = 0;
        return deserialize(str.split(","));
    }
    
    private TreeNode deserialize(String[] strs) {
        if (mIndex >= strs.length || strs[mIndex].equals("$")) {
            return null;
        }
        TreeNode node = new TreeNode(Integer.parseInt(strs[mIndex]));
        mIndex++;
        node.left = deserialize(strs);
        mIndex++;
        node.right = deserialize(strs);
        return node;
    }
}

复杂度分析

  • 时间复杂度:O(n)。
  • 空间复杂度:O(n)。

👉剑指Offer Java版目录
👉剑指Offer Java版专题

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容