题目:根据前序遍历规则,完成二叉树的序列化与反序列化。所谓序列化是指:遍历二叉树为字符串;所谓反序列化是指依据字符串重新构造二叉树。当在遍历二叉树时,如果碰到Null指针时,会用一个特殊字符”#“代替。
思想:序列化可以采用递归前序遍历算法思想。反序列化,同样可以采用递归的思想。
// 序列化
String Serialize(TreeNode root) {
StringBuilder sb = new StringBuilder();
if (root == null) {
sb.append("#,");
return sb.toString();
}
sb.append(root.val + ",");
sb.append(Serialize(root.left));
sb.append(Serialize(root.right));
return sb.toString();
}
// 反序列化
int index = -1;
TreeNode Deserialize(String str) {
String[] arr = str.split(",");
index++;
if (index >= str.length()) {
return null;
}
TreeNode node = null;
if (!arr[index].equals("#")) {
node = new TreeNode(Integer.parseInt(arr[index]));
node.left = Deserialize(str);
node.right = Deserialize(str);
}
return node;
}