链接:
https://leetcode-cn.com/problems/serialize-and-deserialize-binary-tree/
对于二叉树的问题来说,其实归根结底就是考遍历树的三种方式,就是在遍历之前加上条件,由于树有天然的递归性,递归可以解决很多关于树的问题,如果还想优化一点那就bfs吧,套上模板
package algorithm.leetCode.tree;
import java.util.LinkedList;
import java.util.Queue;
/**
* @author 小黎
* @date 2020/10/26 15:09
* @description emmm,bfs,为null的地方保存null,并返回,
*/
public class LeetCodeOffer37 {
//定义一个内部类,表示树的节点
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x;
}
}
// Encodes a tree to a single string.
//树的话一般都是用递归做
public String serialize(TreeNode root) {
if(root == null){
return "null,";
}
//前序遍历
String res = root.val + ",";
res += serialize(root.left);
res += serialize(root.right);
return res;
}
// Decodes your encoded data to tree.
public TreeNode deserialize(String data) {
//把字符串分割成一个一个的
String[] arr = data.split(",");
Queue<String> queue = new LinkedList<>();
//加到队列中
for(int i = 0; i < arr.length; i++){
queue.offer(arr[i]);
}
//递归遍历
return StringToTree(queue);
}
public TreeNode StringToTree(Queue<String> queue){
String val = queue.poll();
//如果值等于null。返回null
if(val.equals("null")){
return null;
}
//递归递归
TreeNode root = new TreeNode(Integer.valueOf(val));
root.left =StringToTree(queue);
root.right = StringToTree(queue);
return root;
}
public static void main(String[] args) {
LeetCodeOffer37 l = new LeetCodeOffer37();
l.deserialize("1,2,3,null,null,4,5");
LeetCodeOffer37.TreeNode p =new LeetCodeOffer37().new TreeNode(1);
}
}