序列化格式:子节点为空用特殊符号表示,且节点与节点之间的用都逗号隔开 反序列化:递归先处理左右子树,化整为零
/** * 序列化 */ public static String serializeTree(Node root) { if (root == null) { return null; } String s = doSerializeTree(root); return s.substring(0,s.length() - 1); } private static String doSerializeTree(Node root) { String s = ""; s += (root.val) + ","; s += root.left == null ? "#," : doSerializeTree(root.left); s += root.right == null ? "#," : doSerializeTree(root.right); return s; } /** * 反序列化 * */ static Node deSerialize(String str) { if (str == null || str == "") { return null; } char[] cs = str.toCharArray(); return doDeSerialize(cs); } static int cur = 0; private static Node doDeSerialize(char[] cs) { if (cur == cs.length || cs[cur] == '#') { return null; } Node tmp = new Node(Integer.valueOf(cs[cur] +"")); cur += 2; // 跳过逗号 Node left = doDeSerialize(cs); cur += 2; Node right = doDeSerialize(cs); tmp.left = left; tmp.right = right; return tmp; }