提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
题目描述
请实现两个函数,分别用来序列化和反序列化二叉树。
示例:
你可以将以下二叉树:
序列化为 “[1,2,3,null,null,4,5]”
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/xu-lie-hua-er-cha-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题过程
解题思路
序列化:利用队列先进先出的性质,一边出队一边入队。其中:当出队的节点不为null,则append该节点,并入队其左右节点(不管左右节点是否为null),否则append“null”。
反序列化:将传入的字符串变成字符串数组。拿出字符串数组的第一个元素,创建树节点。随后建立循环,出队队列元素。为队列元素创建左右节点,用索引i遍历字符串数组。根据是否等于“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) {
if(root == null){
return "[]";
}
StringBuilder str = new StringBuilder();
str.append("[");
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()){
TreeNode node = queue.poll();//出队
if(node != null){ //当前出队的节点不为null,则入队其左右节点(不管左右节点是否为null)
str.append(node.val);
str.append(",");
queue.offer(node.left);
queue.offer(node.right);
}else{
str.append("null");
str.append(",");
}
}
str.deleteCharAt(str.length() - 1);
str.append("]");
return str.toString();
}
// Decodes your encoded data to tree.
public TreeNode deserialize(String data) {
if(data.equals("[]")){
return null;
}
String[] str = data.substring(1, data.length() - 1).split(",");
Queue<TreeNode> queue = new LinkedList<>();
TreeNode root = new TreeNode(Integer.parseInt(str[0]));
queue.offer(root);
int i = 1;
while(!queue.isEmpty()){
TreeNode node = queue.poll();
if(!str[i].equals("null") ){
node.left = new TreeNode(Integer.parseInt(str[i]));
queue.offer(node.left);
}
i++;
if(!str[i].equals("null") ){
node.right = new TreeNode(Integer.parseInt(str[i]));
queue.offer(node.right);
}
i++;
}
return root;
}
}
// Your Codec object will be instantiated and called as such:
// Codec codec = new Codec();
// codec.deserialize(codec.serialize(root));
总结
暂时没有总结,待续。。。