二叉树的序列化与反序列化
🙇👀🙇树的遍历一般有两个策略:BFS / DFS。
BFS 广度优先搜索,按照树的层次顺序从上到下遍历所有的节点。
DFS深度优先搜索,从树的根节点开始,向一个方向一直延伸到某个叶子节点,然后回到根,跳到另一个子树上,继续遍历。
根据根节点、左右子节点的输出顺序,可以将树的遍历分为:
前序遍历
中序遍历
后序遍历
👀💬今日的练习,二叉树的序列化和反序列化。
🙇序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。
🙋递归解法
public String serialize(TreeNode root) {
if (root == null) {
return "null";
}
String rserialize = rserialize(root, "");
return rserialize;
}
private String rserialize(TreeNode root, String str) {
if (root == null) {
if ("".equals(str)) {
str += "null";
} else {
str += ",null";
}
} else {
if ("".equals(str)) {
str += "" + str.valueOf(root.val);
} else {
str = str + "," + str.valueOf(root.val);
}
str = rserialize(root.left, str);
str = rserialize(root.right, str);
}
return str;
}
public TreeNode deserialize(String data) {
if (data.equals("null")) {
return null;
}
LinkedList<String> list = new LinkedList<>(Arrays.asList(data.split(",")));
return rdeserialize(list);
}
private TreeNode rdeserialize(LinkedList<String> list) {
if (list.get(0).equals("null")) {
list.removeFirst();
return null;
}
TreeNode node = new TreeNode(Integer.valueOf(list.get(0)));
list.removeFirst();
node.left = rdeserialize(list);
node.right = rdeserialize(list);
return node;
}
不积跬步,无以至千里。
文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
END
👇