449.serialize-and-deserialize-bst.java 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /**
  2. * Definition for a binary tree node.
  3. * public class TreeNode {
  4. * int val;
  5. * TreeNode left;
  6. * TreeNode right;
  7. * TreeNode(int x) { val = x; }
  8. * }
  9. */
  10. public class Codec {
  11. // Encodes a tree to a single string.
  12. public String serialize(TreeNode root) {
  13. if (root == null) return "nil";
  14. StringBuilder sb = new StringBuilder();
  15. sb.append(Integer.toString(root.val));
  16. LinkedList<TreeNode> list = new LinkedList<>();
  17. list.add(root.left);
  18. list.add(root.right);
  19. while (list.size() != 0) {
  20. TreeNode node = list.poll();
  21. if (node == null) {
  22. sb.append(",nil");
  23. } else {
  24. sb.append(',');
  25. sb.append(Integer.toString(node.val));
  26. list.add(node.left);
  27. list.add(node.right);
  28. }
  29. }
  30. return sb.toString();
  31. }
  32. // Decodes your encoded data to tree.
  33. public TreeNode deserialize(String data) {
  34. if (data.equals("nil")) return null;
  35. String[] strs = data.split(",");
  36. TreeNode root = new TreeNode(Integer.parseInt(strs[0]));
  37. LinkedList<TreeNode> list = new LinkedList<>();
  38. list.add(root);
  39. for (int i = 1; i < strs.length; i++) {
  40. TreeNode node = list.poll();
  41. if (!strs[i].equals("nil")) {
  42. node.left = new TreeNode(Integer.parseInt(strs[i]));
  43. list.add(node.left);
  44. }
  45. if (!strs[++i].equals("nil")) {
  46. node.right = new TreeNode(Integer.parseInt(strs[i]));
  47. list.add(node.right);
  48. }
  49. }
  50. return root;
  51. }
  52. }
  53. // Your Codec object will be instantiated and called as such:
  54. // Codec codec = new Codec();
  55. // codec.deserialize(codec.serialize(root));