|  | @@ -0,0 +1,58 @@
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * 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));
 |