# LeetCode 297：二叉树的序列化与反序列化 Serialize and Deserialize Binary Tree

Serialization is the process of converting a data structure or object into a sequence of bits so that it can be stored in a file or memory buffer, or transmitted across a network connection link to be reconstructed later in the same or another computer environment.

Design an algorithm to serialize and deserialize a binary tree. There is no restriction on how your serialization/deserialization algorithm should work. You just need to ensure that a binary tree can be serialized to a string and this string can be deserialized to the original tree structure.

```你可以将以下二叉树：

1
/ \
2   3
/ \
4   5

Clarification: The above format is the same as how LeetCode serializes a binary tree. You do not necessarily need to follow this format, so please be creative and come up with different approaches yourself.

Note: Do not use class member/global/static variables to store states. Your serialize and deserialize algorithms should be stateless.

### Java:

```public class Codec {

public String serialize(TreeNode root) {
return serializeHelper(root, "");
}

private String serializeHelper(TreeNode root, String str) {
// 基线条件：遇到 null 时构造 “null” 字符串
if (root == null)
return str + "null,";
// 构造返回字符串 str
str += String.valueOf(root.val) + ",";
str = serializeHelper(root.left, str);
str = serializeHelper(root.right, str);
return str;
}

public TreeNode deserialize(String data) {
String[] data_array = data.split(",");
// 根据前序遍历的结果逆向构造二叉树时，因为要从左到右操作前序遍历结果，所以使用队列更适合
return deserializeHelper(list);
}

private TreeNode deserializeHelper(Queue<String> queue) {
if (queue.peek().equals("null")) {
queue.poll();
return null;
}
TreeNode root = new TreeNode(Integer.valueOf(queue.poll()));
root.left = deserializeHelper(queue);
root.right = deserializeHelper(queue);
return root;
}
}```

### Python

```class Codec:

def serialize(self, root):
"""Encodes a tree to a single string.

:type root: TreeNode
:rtype: str
"""
def helper(root, string):
if not root:
string += "None,"
else:
string += str(root.val)+","
string = helper(root.left, string)
string = helper(root.right, string)
return string
return helper(root, '')

def deserialize(self, data):
"""Decodes your encoded data to tree.

:type data: str
:rtype: TreeNode
"""
def helper(l: list):
if(l[0] == "None"):
l.pop(0)
return None
root = TreeNode(l.pop(0))
root.left = helper(l)
root.right = helper(l)
return root

data_list = data.split(',')
root = helper(data_list)
return root```

0 条评论

• ### LeetCode 297.Serialize And Deserialize Binary Tree

Serialization is the process of converting a data structure or object into a seq...

• ### LeetCode 428. 序列化和反序列化 N 叉树（DFS）

序列化是指将一个数据结构转化为位序列的过程，因此可以将其存储在文件中或内存缓冲区中，以便稍后在相同或不同的计算机环境中恢复结构。

• ### LC297—二叉树的序列化与反序列化

LC297---二叉树的序列化与反序列化 ...

• ### [LintCode] Serialize and Deserialize Binary Tree（二叉树的序列化和反序列化）

设计一个算法，并编写代码来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”，读取文件后重建同样的二叉树被称为“反序列化”。

• ### ​LeetCode刷题实战449：序列化和反序列化二叉搜索树

算法的重要性，我就不多说了吧，想去大厂，就必须要经过基础知识和业务逻辑面试+算法面试。所以，为了提高大家的算法能力，这个公众号后续每天带大家做一道算法题，题目就...

• ### Tree - 297. Serialize and Deserialize Binary Tree

297. Serialize and Deserialize Binary Tree

• ### Leetcode 297. Serialize and Deserialize Binary Tree

Serialization is the process of converting a data structure or object into a se...

• ### Leetcode 297. Serialize and Deserialize Binary Tree

Serialization is the process of converting a data structure or object into a se...

• ### LC297—二叉树的序列化与反序列化

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

• ### 二叉树高频题

Given a binary tree, return the preorder traversal of its nodes' values.

• ### leetcode449. Serialize and Deserialize BST

将二叉搜索树序列化和反序列化，序列化是指将树用字符串的形式表示，反序列化是指将字符串形式的树还原成原来的样子。

• ### 剑指 Offer 37. 序列化二叉树

链接：https://leetcode-cn.com/problems/xu-lie-hua-er-cha-shu-lcof/

• ### LeetCode 297. 二叉树的序列化与反序列化（前序遍历&层序遍历）

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

• ### 好友抖音面试真题：二叉树的序列化与反序列化(解法二)

之前分享了朋友面试抖音的真题：LeetCode 297. 二叉树的序列化与反序列化，我用的BFS（广度优先遍历）的方法来做的。事实上，朋友在面试的时候也是用BF...

• ### LintCode-7二叉树的序列化和反序列化

设计一个算法，并编写代码来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”，读取文件后重建同样的二叉树被称为“反序列化”。

• ### 一天一大 leet(二叉树的序列化与反序列化)难度:困难 DAY-16

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

• ### 二叉树的题，就那几个框架，枯燥至极🤔

JSON 的运用非常广泛，比如我们经常将变成语言中的结构体序列化成 JSON 字符串，存入缓存或者通过网络发送给远端服务，消费者接受 JSON 字符串然后进行反...

• ### LeetCode 297.序列化二叉树 - JavaScript

题目描述：请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑，你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字...

• ### 二叉树的序列化与反序列化

这道题的在leecode里面标记是困难，但是实现起来我感觉比较简单，可能是没怎么要求效率 ，有个问题是恢复的时候需要记录现在恢复到第几层了，用了个status去...