剑指Offer-python 37 序列化二叉树

it2022-05-05  203

请实现两个函数,分别用来序列化和反序列化二叉树。

序列化二叉树:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串。需要注意的是,序列化二叉树的过程中,如果遇到空节点,需要以某种符号(这里用#)表示。

二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树。

先序序列化结果重构二叉树:分割二叉树的序列化字符串,遍历nodes数组建立二叉树,如果当前遍历元素非 # 则作为一个结点插入树中作为上一结点的左儿子,当前遍历元素为 # 则表示此子树已结束,遍历下一元素作为上一结点的右儿子。

解题思路

# -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def Serialize(self, root): # write code here vallist = [] def preOrder(root): if not root: vallist.append('#') else: vallist.append(str(root.val)) preOrder(root.left) preOrder(root.right) preOrder(root) return ' '.join(vallist) def Deserialize(self, s): # write code here vallist = [val for val in s.split()] # 利用分隔好的字符串生成的数组生成列表 def dePre(): if vallist: val = vallist.pop(0) if val == "#": return None node = TreeNode(int(val)) node.left = dePre() node.right = dePre() return node return dePre()

最新回复(0)