力扣labuladong一刷day32天二叉樹
一、297. 二叉樹的序列化與反序列化
題目鏈接:https://leetcode.cn/problems/serialize-and-deserialize-binary-tree/
思路:關于序列化與反序列化,題目不要求序列化的方式,只要求樹經過序列化和反序列化之后依然一樣,如果序列化的過程中記錄了空節點則只通過前序或者后序就可以完整記錄二叉樹的信息,可以還原,但中序不可以。
我采用",“分割不同節點,”#"表示null。前序遍歷拼接字符串進行序列化,反序列化,也是前序遍歷,當然需要在進入遞歸之前new 一個節點,然后把遞歸的返回值設置為該節點的左右子節點。
public class Codec {StringBuilder builder = new StringBuilder();LinkedList<String> list = new LinkedList<>();public String serialize(TreeNode root) {traverse(root);return builder.toString();}public TreeNode deserialize(String data) {String[] split = data.split(",");for (String s : split) {list.add(s);}return create();}void traverse(TreeNode root) {if (root == null) {builder.append("#,");return;}builder.append(root.val).append(",");traverse(root.left);traverse(root.right);}TreeNode create() {if (list.isEmpty()) {return null;}String s = list.removeFirst();if ("#".equals(s)) return null;TreeNode node = new TreeNode(Integer.parseInt(s));node.left = create();node.right = create();return node;}
}