publicclassCodec{// Encodes a tree to a single string.publicStringserialize(TreeNode root){if(null== root)return"#";return root.val +"!"+serialize(root.left)+"!"+serialize(root.right);}// Decodes your encoded data to tree.publicTreeNodedeserialize(String data){String[] values = data.split("!");returndeserializeRecursion(values,newint[]{0});}privateTreeNodedeserializeRecursion(String[] values,int[] index){String value = values[index[0]++];if(value.equals("#"))returnnull;TreeNode left =deserializeRecursion(values, index), right =deserializeRecursion(values, index);returnnewTreeNode(Integer.parseInt(value), left, right);}}
题目链接思路在序列化时我们选择前序遍历的方式,于此同时,如果中间遍历过程中出现了为null的结点,我们用一个特殊符号#代替,同时为了后续方便处理序列化的结果,我们把每个结点间用逗号分隔~反序列化时要首先把字符串按照逗号分隔开~ 然后递归地处理,唯一需要注意的就是对于数组的索引我们需要用一个长度为1的数组来表示,这样在某一步修改后才可以及时更新索引public class Codec { // Encodes a tree to a single string. public S