[LeetCode] Serialize and Deserialize Binary Tree

来源:互联网 发布:酷友网络 编辑:程序博客网 时间:2024/05/22 00:16

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.

For example, you may serialize the following tree

    1   / \  2   3     / \    4   5
as "[1,2,3,null,null,4,5]", just the same as how LeetCode OJ serializes a binary tree. You do not necessarily need to follow this format, so please be creative and come up with different approaches yourself.

Note: Do not use class member/global/static variables to store states. Your serialize and deserialize algorithms should be stateless.


代码如下:

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Codec {    // Encodes a tree to a single string.    public String serialize(TreeNode root) {        if(root==null) return "";        StringBuffer re=new StringBuffer();        ArrayList<TreeNode> level=new ArrayList<TreeNode>();        level.add(root);        while(!level.isEmpty()){        ArrayList<TreeNode> newLevel=new ArrayList<TreeNode>();        boolean flag=true;        for(int i=0;i<level.size();i++){        TreeNode node=level.get(i);        if(node==null) continue;        flag=false;        newLevel.add(node.left);        newLevel.add(node.right);        }        if(flag) break;        for(int i=0;i<level.size();i++){        TreeNode node=level.get(i);        if(node!=null) re.append(node.val);        else re.append("null");            re.append(",");        }        level=newLevel;        }        System.out.println(re);        return re.substring(0,re.length()-1);    }    // Decodes your encoded data to tree.    public TreeNode deserialize(String data) {        if("".equals(data)) return null;        String[] arr=data.split(",");        ArrayList<Integer> list=new ArrayList<Integer>();        for(String str:arr){        if("null".equals(str)) list.add(null);        else list.add(Integer.parseInt(str));        }        if(list.size()==0) return null;        Queue<TreeNode> queue=new LinkedList<TreeNode>();        TreeNode root=new TreeNode(list.get(0));        queue.add(root);        for(int i=1;i<list.size();i+=2){        TreeNode node=queue.poll();        if(node==null){                i-=2;continue;            }        node.left=list.get(i)==null?null:new TreeNode(list.get(i));        node.right=list.get(i+1)==null?null:new TreeNode(list.get(i+1));        queue.add(node.left);queue.add(node.right);        }        return root;    }}// Your Codec object will be instantiated and called as such:// Codec codec = new Codec();// codec.deserialize(codec.serialize(root));


原创粉丝点击