Leetcode297 二叉树的序列化与反序列化

230 阅读1分钟

这道题是当时字节的一道面试题,对二叉树进行序列化和反序列化
序列化可以利用前序,中序,后序遍历均可;反序列的时候要用相同的规则即可

image.png

public class Codec {

    // Encodes a tree to a single string.
    public String serialize(TreeNode root) {
        return rserialize(root,"");
    }

    // Decodes your encoded data to tree.
    public TreeNode deserialize(String data) {
        List<String> list = new LinkedList<>(Arrays.asList(data.split(",")));
        return rdeserialize(list);
    }

    public String rserialize(TreeNode root,String str){
        if(root==null) {
            str+="Null," ;
            return str;
        }
        str += root.val+",";
        str = rserialize(root.left,str);
        str = rserialize(root.right,str);
        return str;
    }

    public TreeNode rdeserialize(List<String> list){
        if(list.get(0).equals("Null")){
            list.remove(0);
            return null;
        }
        TreeNode root = new TreeNode(Integer.valueOf(list.get(0)));
        list.remove(0);
        root.left = rdeserialize(list);
        root.right = rdeserialize(list);
        return root;
    }
}