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

 

posted @ 2022-01-15 20:44  CaptainDragonfly  阅读(34)  评论(0编辑  收藏  举报