/** * 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 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 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));