题目:请实现两个函数,分别用来序列化和反序列化二叉树
思路:1、序列化时根据先序遍历将为空的存为任一符号,比如“$”,并且每个字符之间用“,”隔开;
2、反序列化时,根据先序序列构建二叉树。第一个节点为根节点,然后构建根节点的左右子树,以此构建直到字符串为空
代码:
/**
* 序列化二叉树
* @param root
* @return
*/
String Serialize(TreeNode root) {
if (root == null)
return "$";
return root.val + "," + Serialize(root.left) + "," + Serialize(root.right);
}
int index = -1;
/**
* 反序列化二叉树
* @param str
* @return
*/
TreeNode Deserialize(String str) {
String[] arr = str.split(",");
TreeNode node = null;
index++;
if(!arr[index].equals("$")) {
node = new TreeNode(Integer.valueOf(arr[index]));//构建根节点
node.left = Deserialize(str);//构建左子树
node.right = Deserialize(str);//构建右子树
}
return node;
}