在算法和数据结构的学习中,Python二叉树序列化是一个非常重要的概念。无论是在面试题(如LeetCode)中,还是在实际项目开发中,我们常常需要将一棵二叉树转换为字符串(序列化),以便存储或传输;然后再将字符串还原成原来的二叉树结构(反序列化)。本文将用通俗易懂的方式,带你一步步掌握这一核心技能。
简单来说,二叉树序列化就是把一棵二叉树转换成一个字符串的过程。而二叉树反序列化则是把这个字符串再变回原来的二叉树结构。这样做有什么用呢?比如:

最常用的序列化方式有两种:
null 表示。null 表示空节点。本文将以层序遍历为例进行讲解,这也是LeetCode官方采用的标准格式。
首先,我们需要定义一个简单的二叉树节点类:
class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right我们将使用队列(collections.deque)来实现层序遍历:
from collections import dequedef serialize(root): if not root: return "[]" result = [] queue = deque([root]) while queue: node = queue.popleft() if node: result.append(str(node.val)) queue.append(node.left) queue.append(node.right) else: result.append("null") # 去掉末尾多余的 null while result and result[-1] == "null": result.pop() return "[" + ",".join(result) + "]"反序列化就是根据字符串重建二叉树。我们依然使用队列来逐层构建:
def deserialize(data): if data == "[]": return None # 去掉首尾的方括号,并分割 vals = data[1:-1].split(",") root = TreeNode(int(vals[0])) queue = deque([root]) i = 1 while queue and i < len(vals): node = queue.popleft() # 处理左子节点 if vals[i] != "null": node.left = TreeNode(int(vals[i])) queue.append(node.left) i += 1 # 处理右子节点(注意边界检查) if i < len(vals) and vals[i] != "null": node.right = TreeNode(int(vals[i])) queue.append(node.right) i += 1 return root让我们用一个具体例子来测试:
# 构建如下二叉树:# 1# / \# 2 3# / \# 4 5root = TreeNode(1)root.left = TreeNode(2)root.right = TreeNode(3)root.right.left = TreeNode(4)root.right.right = TreeNode(5)# 序列化s = serialize(root)print(s) # 输出: [1,2,3,null,null,4,5]# 反序列化new_root = deserialize(s)# 再次序列化验证print(serialize(new_root)) # 输出: [1,2,3,null,null,4,5]掌握Python二叉树序列化和反序列化,不仅能帮助你轻松应对像 LeetCode 297 这样的经典题目,还能让你在处理复杂数据结构时更加得心应手。这是每一个学习Python数据结构教程的开发者都应掌握的基础技能。
本文详细讲解了如何用 Python 实现二叉树的序列化与反序列化,重点介绍了基于层序遍历的方法。通过清晰的代码示例和图解,即使是编程小白也能轻松理解。记住,多动手写代码、多调试,是掌握这类算法的关键!
如果你正在准备算法面试,建议将这段代码背下来,并尝试用前序遍历的方式也实现一遍,加深理解。
本文由主机测评网于2025-12-12发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025126623.html