在算法和数据结构的学习中,二叉树的序列化与反序列化是一个经典问题。本文将手把手教你如何使用Python语言实现二叉树反序列化,即使你是编程小白也能轻松理解!我们将从基本概念讲起,逐步构建完整的代码,并解释每一步的逻辑。
简单来说,二叉树反序列化就是将一个字符串(通常是通过某种规则编码的)重新转换成一棵二叉树的过程。它的“逆操作”是序列化,即把一棵二叉树转换成字符串。
常见的序列化格式包括层序遍历(BFS)、前序遍历(DFS)等。本文将以层序遍历为基础进行讲解,这也是LeetCode等平台常用的方式。

首先,我们需要定义一个简单的二叉树节点类:
class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right假设我们有一个字符串表示的层序遍历结果,例如:"[1,2,3,null,null,4,5]"。我们的目标是将它还原成一棵真实的二叉树。
实现思路如下:
下面是完整的Python二叉树反序列化代码:
from collections import dequeclass TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = rightdef deserialize(data: str) -> TreeNode: """ 将字符串反序列化为二叉树 输入示例: "[1,2,3,null,null,4,5]" """ if data == "[]": return None # 去掉首尾的方括号,并分割 vals = data.strip('[]').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# 测试示例if __name__ == "__main__": data = "[1,2,3,null,null,4,5]" tree = deserialize(data) print(f"根节点值: {tree.val}") # 输出: 1 print(f"左子节点值: {tree.left.val}") # 输出: 2 print(f"右子节点值: {tree.right.val}") # 输出: 3strip('[]') 去掉首尾括号,再用 split(',') 分割成列表。collections.deque 实现先进先出,确保按层构建。vals[i] 前都检查 i < len(vals),防止越界。掌握Python数据结构教程中的二叉树反序列化,不仅能帮助你解决 LeetCode 上的经典题目(如第297题),还能加深对树结构、队列、字符串处理的理解。这是面试和实际开发中非常实用的技能!
本文详细讲解了如何用 Python 实现二叉树反序列化,从概念到代码,一步步带你掌握核心逻辑。记住关键点:使用队列按层构建、正确处理 null、注意数组边界。
现在你已经可以自信地应对任何关于LeetCode二叉树重建的问题了!快去动手试试吧~
本文由主机测评网于2025-12-25发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/20251212445.html