1、题目
image.png2、分析
序列化:直接使用前序遍历,遇到null的,用特殊字符代替。返回拼接后的字符串
反序列化:利用递归的方法,遇到特殊字符,结束递归返回null即可(反序列化就是构造二叉树,涉及到构造二叉树的话,首先考虑找到根节点)
3、代码
以下代码用StringBuilder代替String直接拼接,会省很多时间。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Codec {
String SPE = ",";
String NULL = "#";
// Encodes a tree to a single string.
public String serialize(TreeNode root) {
if(root == null) return NULL;
String val = String.valueOf(root.val);
String left = serialize(root.left);
String right = serialize(root.right);
String subStr = val + SPE + left + SPE + right;
return subStr;
}
// Decodes your encoded data to tree.
public TreeNode deserialize(String data) {
String[] nodes = data.split(SPE);
LinkedList<String> nodeList = new LinkedList<String>();
for(String s: nodes){
nodeList.add(s);
}
return deserialize(nodeList);
}
private TreeNode deserialize(LinkedList<String> nodeList){
if(nodeList.isEmpty()) return null;
String str = nodeList.removeFirst();
if(str.equals(NULL)){
return null;
}
TreeNode node = new TreeNode(Integer.valueOf(str).intValue());
node.left = deserialize(nodeList);
node.right = deserialize(nodeList);
return node;
}
}
网友评论