leetcode链接:https://leetcode-cn.com/problems/xu-lie-hua-er-cha-shu-lcof/
请实现两个函数,分别用来序列化和反序列化二叉树。
示例:
你可以将以下二叉树:
1
/ \
2 3
/ \
4 5序列化为 "[1,2,3,null,null,4,5]"
解题思路:由题可知,序列化反序列化使用的是二叉树的前序遍历序列,因此在序列化的时候,将二叉树进行前序遍历,依次追加到序列化字符串中,若节点为空,则追加null。反序列化时,首先将序列化的字符串用,进行分割成数组,然后再按照前序遍历的顺序依次删除首元素将数组还原为二叉树。
/**
* 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) {
return doSerialize(root,"");
}
public String doSerialize(TreeNode root,String str){
if(root==null){
str = str + "null,";
return str;
}
str = str + root.val + ",";
str = doSerialize(root.left,str);
str = doSerialize(root.right,str);
return str;
}
// Decodes your encoded data to tree.
public TreeNode deserialize(String data) {
String[] dataArray = data.split(",");
List<String> list = new LinkedList<String>(Arrays.asList(dataArray));
return doDeserialize(list);
}
public TreeNode doDeserialize(List<String> list){
if(list.get(0).equals("null")){
list.remove(0);
return null;
}
TreeNode node = new TreeNode(Integer.valueOf(list.get(0)));
list.remove(0);
node.left = doDeserialize(list);
node.right = doDeserialize(list);
return node;
}
}
// Your Codec object will be instantiated and called as such:
// Codec codec = new Codec();
// codec.deserialize(codec.serialize(root));