剑指 Offer 37. 序列化二叉树

90 阅读1分钟

题目描述

请实现两个函数,分别用来序列化和反序列化二叉树。
示例: 
你可以将以下二叉树:

    1
   / \
  2   3
     / \
    4   5

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

解题思路: 辅助队列法

  1. 这个题目主要是实现 数组构造二叉树二叉树层序便利为数组 的方法
  2. 在构造方法中: 我们使用辅助队列, 每次取出队头元素, 在元素list中拿出2个元素, 分别给队头元素的左右孩子赋值, 并且将左右孩子入队, 直到list为空
  3. 在解构方法中: 同样使用辅助队列, 将队头元素出队、遍历后, 将队头元素的左右孩子入队直到队列为空

示例代码

def serialize(root):
    queue = [root]
    res = []
    while queue:
        temp = queue.pop(0)
        res.append(temp.val)

        if temp.left:
            queue.append(temp.left)
        if temp.right:
            queue.append(temp.right)
    print(res)
    return res


def deserialize(arr):

    root = TreeNode(arr.pop(0))
    queue = [root]
    while queue:
        temp = queue.pop(0)
        if not arr:
            break
        temp.left = TreeNode(arr.pop(0))
        queue.append(temp.left)

        if not arr:
            break
        temp.right = TreeNode(arr.pop(0))
        queue.append(temp.right)
    return root

注: 题目中给的参数和返回值都是数组组成的字符串, 示例代码直接返回 二叉树的root所有元素的list