题目:序列化二叉树
题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
解题思路:
1、先序遍历序列化,即采用递归的方式,如果遇到null,则拼接“#”,反之则拼接“”。
2、反序列化,先采用字符串分割,将每个字符串添加到队列中;采用递归的方式,分别找到头结点及左右孩子节点。
代码实现:
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
import java.util.*;
public class Solution {
String Serialize(TreeNode root) {
if(root==null) {
return "#!";
}
String res="";
res+=root.val+"!"; //以逗号分隔,返回一个字符串数组
res+=Serialize(root.left);
res+=Serialize(root.right);
return res;
}
TreeNode Deserialize(String str) {
//将字符串进行解析
String [] ss=str.split("!");
//前序遍历,所以可以使用队列来挨个遍历节点的值
Deque<String> deq=new LinkedList<String>();
for(String s:ss) {
deq.add(s);
}
return Deserialize(deq);
}
private TreeNode Deserialize(Deque<String> deq) {
String s=deq.poll();
if(s.equals("#")) {
return null;
}
//头节点
TreeNode root=new TreeNode(Integer.parseInt(s));
//左子树
root.left=Deserialize(deq);
//右子树
root.right=Deserialize(deq);
return root;
}
}