LeetCode449-序列化和反序列化二叉搜索树
原题链接:https://leetcode-cn.com/problems/serialize-and-deserialize-bst/
相同的题:
https://leetcode-cn.com/problems/h54YBf/
https://leetcode-cn.com/problems/xu-lie-hua-er-cha-shu-lcof/
https://leetcode-cn.com/problems/serialize-and-deserialize-binary-tree/
思路:按照先序遍历方式序列化和反序列化,也可以用中序或者后序遍历的方式
代码:
1 # Definition for a binary tree node. 2 # class TreeNode: 3 # def __init__(self, x): 4 # self.val = x 5 # self.left = None 6 # self.right = None 7 8 from collections import deque 9 class Codec: 10 11 def serialize(self, root: TreeNode) -> str: 12 """Encodes a tree to a single string. 13 """ 14 if not root: 15 return "#_" 16 res = str(root.val) + "_" 17 res += self.serialize(root.left) 18 res += self.serialize(root.right) 19 return res 20 21 22 def deserialize(self, data: str) -> TreeNode: 23 """Decodes your encoded data to tree. 24 """ 25 values = data.split("_") 26 queue = deque() 27 for i in values: 28 queue.append(i) 29 return self.recon_pre_order(queue) 30 31 def recon_pre_order(self, queue): 32 value = queue.popleft() 33 if value == "#": 34 return None 35 head = TreeNode(int(value)) 36 head.left = self.recon_pre_order(queue) 37 head.right = self.recon_pre_order(queue) 38 return head 39 40 41 # Your Codec object will be instantiated and called as such: 42 # Your Codec object will be instantiated and called as such: 43 # ser = Codec() 44 # deser = Codec() 45 # tree = ser.serialize(root) 46 # ans = deser.deserialize(tree) 47 # return ans