一、题目内容

image.png

二、题解

解法1:

思路

考察层序遍历,序列化时,null节点也要存储

代码

  1. public class Codec {
  2. // Encodes a tree to a single string.
  3. public String serialize(TreeNode root) {
  4. if (root == null) {
  5. return "[]";
  6. }
  7. StringBuilder res = new StringBuilder("[");
  8. Queue<TreeNode> queue = new LinkedList<>();
  9. queue.add(root);
  10. while (!queue.isEmpty()) {
  11. TreeNode node = queue.poll();
  12. if (node != null) {
  13. res.append(node.val + ",");
  14. queue.add(node.left);
  15. queue.add(node.right);
  16. } else {
  17. res.append("null,");
  18. }
  19. }
  20. res.deleteCharAt(res.length() - 1);
  21. res.append("]");
  22. return res.toString();
  23. }
  24. // Decodes your encoded data to tree.
  25. public TreeNode deserialize(String data) {
  26. if (data.equals("[]")) {
  27. return null;
  28. }
  29. String[] vals = data.substring(1, data.length() - 1).split(",");
  30. TreeNode root = new TreeNode(Integer.parseInt(vals[0]));
  31. Queue<TreeNode> queue = new LinkedList<>();
  32. queue.add(root);
  33. int i = 1;
  34. while (!queue.isEmpty()) {
  35. TreeNode node = queue.poll();
  36. if (!vals[i].equals("null")) {
  37. TreeNode left = new TreeNode(Integer.parseInt(vals[i]));
  38. node.left = left;
  39. queue.add(left);
  40. }
  41. i++;
  42. if (!vals[i].equals("null")) {
  43. TreeNode right = new TreeNode(Integer.parseInt(vals[i]));
  44. node.right = right;
  45. queue.add(right);
  46. }
  47. i++;
  48. }
  49. return root;
  50. }
  51. }