题目描述:
题目: 请实现两个函数,分别用来序列化和反序列化二叉树。
序列化: 将所给二叉树转化为字符串;反序列化:将字符串转化为二叉树
思路分析:
序列化时,可以采用BFS来遍历,运用辅助队列来进行层次遍历。反序列化要先构造结点,然后也是BFS进行操作。
参考代码:
//序列化二叉树
public String serialize(TreeNode root) {
if(root == null)return "[]";
StringBuilder res = new StringBuilder("");
LinkedList<TreeNode> queue = new LinkedList<>();
queue.addLast(root);
while(!queue.isEmpty()){
TreeNode node = queue.removeFirst();
if(node != null){
res.append(node.val + ",");
queue.add(node.left);
queue.add(node.right);
}
else res.append("null,");
}
return res.toString().substring(0, res.length() - 1);
}
//反序列化二叉树
public TreeNode deserialize(String data) {
if(data == null || data.length() == 0 || data.equals("[]"))return null;
String[] values = data.split(",");
TreeNode root = new TreeNode(Integer.parseInt(values[0]));
LinkedList<TreeNode> queue = new LinkedList<>();
queue.addLast(root);
int i = 1;
while(!queue.isEmpty()){
TreeNode node = queue.removeFirst();//这里是removeFirst,从头部删除
if(i < data.length() && !values[i].equals("null")){
node.left = new TreeNode(Integer.parseInt(values[i]));
queue.addLast(node.left);
}
i++;
if(i < data.length() && !values[i].equals("null")){
node.right = new TreeNode(Integer.parseInt(values[i]));
queue.addLast(node.right);
}
i++;
}
return root;
}
总结:
练习的多了,就感觉这道题不是很难,但是还是得注意一些细微的地方:String.length()别忘带括号;String.substring()别写成subString,注意大小写;从头部删除还是从尾部删除。
(完)