本题虽然是Hard,但是难度其实和Medium相仿,只是之前没见过类似的题目,就是无论是serialize还是deseialize,都用很朴素的recursion即可解出。
- 时间复杂度:所有node全都遍历一遍,所以是
直接看代码,没有太多神奇的地方:
/*** 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) {StringBuilder sb = new StringBuilder();buildString(sb, root);return sb.toString();}// Decodes your encoded data to tree.public TreeNode deserialize(String data) {return buildTree(new LinkedList<>(Arrays.asList(data.split(","))));}private void buildString(StringBuilder sb, TreeNode node) {if (node == null) {sb.append("#");sb.append(",");}else {sb.append(String.valueOf(node.val));sb.append(",");buildString(sb, node.left);buildString(sb, node.right);}}private TreeNode buildTree(Queue<String> queue) {String value = queue.poll();if ("#".equals(value)) {return null;}TreeNode node = new TreeNode(Integer.valueOf(value));node.left = buildTree(queue);node.right = buildTree(queue);return node;}}// Your Codec object will be instantiated and called as such:// Codec codec = new Codec();// codec.deserialize(codec.serialize(root));
