分析:
将二叉排序树能转化为字符串,字符串能还原为二叉排序树
题意:
这个问题的序列化是很简单的,也一定是需要全部遍历的,本来想的是三种遍历都可以,也确实都可以但是后来决定采取中序遍历,到发序列化的时候发现,根本不知道怎么生成结点才好,因为结点值是从左下到上到右下的。这个时候回溯否决思路,要想生成的时候好生成,层状的结构(一层一层往下生成无疑是最好的)这就是我们的先序遍历了。接下来的问题到后来才发现,忽略了一个问题值如果是13,那么是13还是1和3呢,所以一定要使用分隔符。split方法很熟悉了,反序列的时候使用即可。反序列的时候,只需要反向的取出结点按照每一层来构造即可。(可以采用队列)
/**
* 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) {
if(root == null)
return "#,";
return root.val+","+serialize(root.left)+serialize(root.right);
}
// Decodes your encoded data to tree.
public TreeNode deserialize(String data) {
Queue<String> queue = new LinkedList<>();
String[] str = data.split(",");
for(String s: str){
queue.add(s);
}
return helper(queue);
}
private TreeNode helper(Queue<String> q){ //bfs
String s;
if((s = q.poll()).equals("#"))
return null;
TreeNode node = new TreeNode(Integer.valueOf(s));
node.left = helper(q);
node.right = helper(q);
return node;
}
}