二叉树序列化与反序列化相关题目(Leetcode题解-Python语言)
生活随笔
收集整理的這篇文章主要介紹了
二叉树序列化与反序列化相关题目(Leetcode题解-Python语言)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
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)序列化的思路就是前序遍歷,將各個(gè)節(jié)點(diǎn)值之間通過(guò) ‘,’ 連接起來(lái);反序列化時(shí),首先根據(jù) ‘,’ 進(jìn)行分隔,得到的列表就是各個(gè)節(jié)點(diǎn)的值(字符串),然后進(jìn)行深度遍歷dfs,對(duì)每個(gè)節(jié)點(diǎn)進(jìn)行樹節(jié)點(diǎn)構(gòu)建,左右子樹則是遞歸。
449. 序列化和反序列化二叉搜索樹
由于二叉搜素樹也是二叉樹,所以可以使用上一題的題解。官方題解給出了優(yōu)化,但是不太好理解,暫時(shí)不掌握。
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)同樣的思路,只不過(guò)序列化時(shí)的前序遍歷要用 N 叉樹的方法,而反序列化時(shí)的 dfs 也是要改為 N 叉樹的寫法,其余都一樣。
總結(jié)
以上是生活随笔為你收集整理的二叉树序列化与反序列化相关题目(Leetcode题解-Python语言)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 简单实用高效的3个方法视频降噪如何给视频
- 下一篇: 爬楼梯与路径类题目记忆化递归与动态规划双