【剑指offer】62.序列化二叉树(python)
程序员文章站
2022-07-10 15:42:14
...
题目描述
请实现两个函数,分别用来序列化和反序列化二叉树。
思路
《剑指offer》P283
-
序列化
序列化的方法可以借鉴先序遍历的思想,当遍历到叶子节点的时候,添加#
。 -
反序列化
反序列化可以通过递归来实现。
定义一个index
记录当前的下标,如果当前是数字,则构造一个TreeNode
节点,并递归地向后构造其左右孩子。如果当前是#
,则构造一个空结点。返回该结点。
code
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def __init__(self):
self.index = -1
def Serialize(self, root):
# write code here
# 利用先序遍历的思路
if not root:
return []
node = root
node_stack = []
prelist = []
while node or node_stack:
while node:
prelist.append(node.val)
node_stack.append(node)
node = node.left
prelist.append('#')
node = node_stack.pop()
node = node.right
# return ','.join(p for p in prelist)
prelist.append('#')
return prelist
def Deserialize(self, s):
# write code here
self.index += 1
if self.index >= len(s):
return None
node = None
if s[self.index] != '#':
node = TreeNode(s[self.index])
node.left = self.Deserialize(s)
node.right = self.Deserialize(s)
return node
上一篇: 襄阳之战维持了多久?战争惨烈程度无以言状
下一篇: 若依分离版框架的坑
推荐阅读
-
剑指offer:Python 最小的k个数 多种方法实现 最大堆和最小堆
-
python--剑指offer--困难--41. 数据流中的中位数
-
(python version) 剑指 offer 41. 数据流中的中位数
-
【Leetcode每日笔记】剑指 Offer 47. 礼物的最大价值(Python)
-
剑指offer第二版(Python3)--面试题24:翻转链表
-
【剑指Offer】二叉树的镜像
-
【LeeCode 中等 数学 python3】剑指 Offer 43. 1~n整数中1出现的次数
-
剑指Offer 34. 二叉树中和为某一值的路径(Medium)
-
剑指offer59:按之字形顺序打印二叉树:[[1], [3,2], [4,5,6,7]]
-
《剑指offer》面试题6 重建二叉树