LeetCode 297. 二叉树的序列化与反序列化(bfs,二叉树,Java)
2021/8/3 14:08:01
本文主要是介绍LeetCode 297. 二叉树的序列化与反序列化(bfs,二叉树,Java),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
本题与剑指 Offer 37. 序列化二叉树一致
题目
序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。
请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。
提示: 输入输出格式与 LeetCode 目前使用的方式一致,详情请参阅 LeetCode 序列化二叉树的格式。你并非必须采取这种方式,你也可以采用其他的方法解决这个问题。
示例 1:
输入:root = [1,2,3,null,null,4,5] 输出:[1,2,3,null,null,4,5]
示例 2:
输入:root = [] 输出:[]
示例 3:
输入:root = [1] 输出:[1]
示例 4:
输入:root = [1,2] 输出:[1,2]
提示:
树中结点数在范围 [0, 104] 内 -1000 <= Node.val <= 1000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/serialize-and-deserialize-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
需要注意的地方
- 按照题目的要求,使用bfs合适,队列的使用
- String的方法例如deleteCharAt()方法、substring()方法等
- 具体解题思想可以参考这篇题解LeetCode上的题解
题解
/** * 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 res = new StringBuilder("["); Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.add(root); while(!queue.isEmpty()) { TreeNode t = queue.poll(); if(t != null) { res.append(t.val + ","); queue.add(t.left); queue.add(t.right); } else { res.append("null,"); } } res.deleteCharAt(res.length() - 1); res.append("]"); return res.toString(); } // Decodes your encoded data to tree. public TreeNode deserialize(String data) { if(data.equals("[]")) { return null; } int index = 1; String[] dataChar = data.substring(1, data.length() - 1).split(","); TreeNode root = new TreeNode(new Integer(dataChar[0])); Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.add(root); while(!queue.isEmpty()) { TreeNode t = queue.poll(); if(!dataChar[index].equals("null")) { t.left = new TreeNode(new Integer(dataChar[index])); queue.add(t.left); } index ++; if(!dataChar[index].equals("null")) { t.right = new TreeNode(new Integer(dataChar[index])); queue.add(t.right); } index ++; } return root; } } // Your Codec object will be instantiated and called as such: // Codec ser = new Codec(); // Codec deser = new Codec(); // TreeNode ans = deser.deserialize(ser.serialize(root));
这篇关于LeetCode 297. 二叉树的序列化与反序列化(bfs,二叉树,Java)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-28知识管理革命:文档软件的新玩法了解一下!
- 2024-11-28低代码应用课程:新手入门全攻略
- 2024-11-28哪些办公软件适合团队协作,且能够清晰记录每个阶段的工作进展?
- 2024-11-28全栈低代码开发课程:零基础入门到初级实战
- 2024-11-28拖动排序课程:轻松掌握课程拖动排序功能
- 2024-11-28如何高效管理数字化转型项目
- 2024-11-28SMART法则好用吗?有哪些项目管理工具辅助实现?
- 2024-11-28深度剖析:6 款办公软件如何构建设计团队项目可视化管理新生态?
- 2024-11-28HTTP缓存课程:新手入门指南
- 2024-11-28实战丨证券 HTAP 混合业务场景的难点问题应对