本题虽然是Hard,但是难度其实和Medium相仿,只是之前没见过类似的题目,就是无论是serialize还是deseialize,都用很朴素的recursion即可解出

    • 时间复杂度:所有node全都遍历一遍,所以是297. Serialize and Deserialize Binary Tree[没有解出] - 图1

    直接看代码,没有太多神奇的地方:

    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. StringBuilder sb = new StringBuilder();
    14. buildString(sb, root);
    15. return sb.toString();
    16. }
    17. // Decodes your encoded data to tree.
    18. public TreeNode deserialize(String data) {
    19. return buildTree(new LinkedList<>(Arrays.asList(data.split(","))));
    20. }
    21. private void buildString(StringBuilder sb, TreeNode node) {
    22. if (node == null) {
    23. sb.append("#");
    24. sb.append(",");
    25. }
    26. else {
    27. sb.append(String.valueOf(node.val));
    28. sb.append(",");
    29. buildString(sb, node.left);
    30. buildString(sb, node.right);
    31. }
    32. }
    33. private TreeNode buildTree(Queue<String> queue) {
    34. String value = queue.poll();
    35. if ("#".equals(value)) {
    36. return null;
    37. }
    38. TreeNode node = new TreeNode(Integer.valueOf(value));
    39. node.left = buildTree(queue);
    40. node.right = buildTree(queue);
    41. return node;
    42. }
    43. }
    44. // Your Codec object will be instantiated and called as such:
    45. // Codec codec = new Codec();
    46. // codec.deserialize(codec.serialize(root));