二叉树序列化与反序列化相关题目(Leetcode题解-Python语言)
生活随笔
收集整理的這篇文章主要介紹了
二叉树序列化与反序列化相关题目(Leetcode题解-Python语言)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
297. 二叉樹的序列化與反序列化(劍指 Offer 37. 序列化二叉樹)(劍指 Offer II 048. 序列化與反序列化二叉樹)
class Codec:def serialize(self, root):"""Encodes a tree to a single string.:type root: TreeNode:rtype: str"""if not root:return ''return str(root.val) + ',' + str(self.serialize(root.left)) + ',' + str(self.serialize(root.right))def deserialize(self, data):"""Decodes your encoded data to tree.:type data: str:rtype: TreeNode"""if not data:return Nonedef dfs(dataList):node = dataList.pop(0)if node == '':returnroot = TreeNode(int(node))root.left = dfs(dataList)root.right = dfs(dataList)return rootdataList = data.split(',')return dfs(dataList)序列化的思路就是前序遍歷,將各個節點值之間通過 ‘,’ 連接起來;反序列化時,首先根據 ‘,’ 進行分隔,得到的列表就是各個節點的值(字符串),然后進行深度遍歷dfs,對每個節點進行樹節點構建,左右子樹則是遞歸。
449. 序列化和反序列化二叉搜索樹
由于二叉搜素樹也是二叉樹,所以可以使用上一題的題解。官方題解給出了優化,但是不太好理解,暫時不掌握。
428. 序列化和反序列化 N 叉樹
class Codec:def serialize(self, root: 'Node') -> str:"""Encodes a tree to a single string.:type root: Node:rtype: str"""if not root:return ''data = ''data += str(root.val) + ',' + str(len(root.children))for child in root.children:data += ',' + self.serialize(child)return datadef deserialize(self, data: str) -> 'Node':"""Decodes your encoded data to tree.:type data: str:rtype: Node"""if not data:return Nonedef dfs(dataList) -> 'Node':node = dataList.pop(0)if node == '':returnroot = Node(int(node))root.children = []size = int(dataList.pop(0))for _ in range(size):root.children.append(dfs(dataList))return rootdataList = data.split(',')return dfs(dataList)同樣的思路,只不過序列化時的前序遍歷要用 N 叉樹的方法,而反序列化時的 dfs 也是要改為 N 叉樹的寫法,其余都一樣。
總結
以上是生活随笔為你收集整理的二叉树序列化与反序列化相关题目(Leetcode题解-Python语言)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 简单实用高效的3个方法视频降噪如何给视频
- 下一篇: 爬楼梯与路径类题目记忆化递归与动态规划双