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