| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 | /** * 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 "nil";        StringBuilder sb = new StringBuilder();        sb.append(Integer.toString(root.val));        LinkedList<TreeNode> list = new LinkedList<>();        list.add(root.left);        list.add(root.right);        while (list.size() != 0) {            TreeNode node = list.poll();            if (node == null) {                sb.append(",nil");            } else {                sb.append(',');                sb.append(Integer.toString(node.val));                list.add(node.left);                list.add(node.right);            }        }        return sb.toString();    }    // Decodes your encoded data to tree.    public TreeNode deserialize(String data) {        if (data.equals("nil")) return null;        String[] strs = data.split(",");        TreeNode root = new TreeNode(Integer.parseInt(strs[0]));        LinkedList<TreeNode> list = new LinkedList<>();        list.add(root);        for (int i = 1; i < strs.length; i++) {            TreeNode node = list.poll();            if (!strs[i].equals("nil")) {                node.left = new TreeNode(Integer.parseInt(strs[i]));                list.add(node.left);            }            if (!strs[++i].equals("nil")) {                node.right = new TreeNode(Integer.parseInt(strs[i]));                list.add(node.right);            }        }        return root;    }}// Your Codec object will be instantiated and called as such:// Codec codec = new Codec();// codec.deserialize(codec.serialize(root));
 |