Leetcode 297.二叉树的序列化和反序列化

Posted kexinxin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode 297.二叉树的序列化和反序列化相关的知识,希望对你有一定的参考价值。

二叉树地序列化和反序列化

序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。

请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。

示例

你可以将以下二叉树:

 

序列化为 "[1,2,3,null,null,4,5]"

提示这与 LeetCode 目前使用的方式一致,详情请参阅 LeetCode 序列化二叉树的格式。你并非必须采取这种方式,你也可以采用其他的方法解决这个问题。

说明不要使用类的成员 / 全局 / 静态变量来存储状态,你的序列化和反序列化算法应该是无状态的。

 

 

 1 public class Codec {
 2     // Encodes a tree to a single string.
 3     public List<Integer> serialize(TreeNode root) {
 4         List<Integer> res = new ArrayList<>();
 5         dfs(res, root);
 6         return res;
 7     }
 8 
 9     private void dfs(List<Integer> res, TreeNode root) {
10         if (root == null) {
11             res.add(null);
12         } else {
13             res.add(root.val);
14             dfs(res, root.left);
15             dfs(res, root.right);
16         }
17     }
18 
19     // Decodes your encoded data to tree.
20     public TreeNode deserialize(List<Integer> data) {
21         int index[] = {0};
22         TreeNode root = build(index, data);
23         return root;
24     }
25 
26     private TreeNode build(int[] index, List<Integer> data) {
27         Integer val = data.get(index[0]);
28         index[0] = index[0] + 1;
29         if (val == null) {
30             return null;
31         } else {
32             TreeNode node = new TreeNode(val);
33             node.left = build(index, data);
34             node.right = build(index, data);
35             return node;
36         }
37     }
38 }

 

以上是关于Leetcode 297.二叉树的序列化和反序列化的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 297 二叉树的序列化与反序列化[BFS 二叉树] HERODING的LeetCode之路

LeetCode 449 序列化和反序列化二叉搜索树[二叉树 序列化 前序 中序 后序] HERODING的LeetCode之路

[JavaScript 刷题] 树 - 二叉树的序列化与反序列化, leetcode 297

[JavaScript 刷题] 树 - 二叉树的序列化与反序列化, leetcode 297

Leetcode 297. 二叉树的序列化与反序列化

LeetCode 297. 二叉树的序列化与反序列化(bfs,二叉树,Java)