LeetCode 按层序列化&反序列化二叉树

清疚 2023-07-08 09:13 120阅读 0赞

用数组从0开始存储按层序列化二叉树的结果,则某个节点的索引为i的话,那么其左右子节点的索引分别为2i+1, 2i+2,反序列化时用得上,感觉这样更直观一些。时间复杂度一般般。
在这里插入图片描述

  1. from collections import deque
  2. class Codec:
  3. def serialize(self, root): #序列化
  4. if not root:
  5. return '[]'
  6. res = ''
  7. q = deque([root, ])
  8. while q:
  9. node = q.popleft()
  10. if node:
  11. res = res + str(node.val) +','
  12. q.append(node.left)
  13. q.append(node.right)
  14. else: #序列化过程出现空节点时,就没有必要把空节点的左右子节点加入队列,没有意义。只对序列结果添加的=一个空节点的标志即可。
  15. res = res + 'None' +','
  16. return res[:-1]
  17. def deserialize(self, data):
  18. if data == '[]':
  19. return []
  20. data = data.split(',')
  21. root = TreeNode(int(data[0]))
  22. q = deque([root, ])
  23. i = 0
  24. while q:
  25. node = q.popleft()
  26. try:
  27. node.left = TreeNode(int(data[2*i+1]))
  28. except:
  29. node.left = None
  30. try:
  31. node.right = TreeNode(int(data[2*i+2]))
  32. except:
  33. node.right = None
  34. if node.left: #反序列化过程遇到空节点也不加入队列,处理方式和序列化时相同
  35. q.append(node.left)
  36. if node.right:
  37. q.append(node.right)
  38. i += 1
  39. return root

发表评论

表情:
评论列表 (有 0 条评论,120人围观)

还没有评论,来说两句吧...

相关阅读

    相关 序列/序列

    二叉树被记录成文件的过程,为二叉树的序列化 通过文件重新建立原来的二叉树的过程,为二叉树的反序列化 设计方案并实现。 (已知结点类型为32位整型) 思路:先序遍历实现。