本文主要是介绍力扣labuladong一刷day32天二叉树,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
力扣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;}
}
这篇关于力扣labuladong一刷day32天二叉树的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!