package
0.0.0-20240920062246-d0657495930a
Repository: https://github.com/yigmmk/leetcode.git
Documentation: pkg.go.dev
# Constants
空节点.
# Structs
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
# Interfaces
BFS解题分析
这道题使用BFS的解题更为简单写,默认BFS时,需要判断当前节点是否有左、右子树
而此时,我们无需判断左右子树,当node为None时添加一个None到队列中即可。
DFS解题分析
在使用DFS时,势必将根节点放在第一个位置,可以方便我们反序列化,所以应该使用前序遍历。
遍历的时候同样注意,如果遇到空节点,需要将为空的节点也记录下来
即当一个子节点的左右节点都是None时,表示它其实是一个叶子节点。
反序列化时,同样通过前序遍历来实现,但注意默认的字符串转化为列表后,我们应该将从左到右遍历才满足条件
Python我们可以反转列表或者使用deque的双端队列
Java我们可以链表来实现
具体BFS、DFS解题如下:
---------------bfs------------
class Codec:
def serialize(self, root):
if not root:
return ""
dq = deque([root])
res = []
while dq:
node = dq.popleft()
if node:
res.append(str(node.val))
dq.append(node.left)
dq.append(node.right)
else:
res.append('None')
return ','.join(res)
def deserialize(self, data):
if not data:
return []
dataList = data.split(',')
root = TreeNode(int(dataList[0]))
dq = deque([root])
i = 1
while dq:
node = dq.popleft()
if dataList[i] != 'None':
node.left = TreeNode(int(dataList[i]))
dq.append(node.left)
i += 1
if dataList[i] != 'None':
node.right = TreeNode(int(dataList[i]))
dq.append(node.right)
i += 1
return root
-------------------DFS解题--------------------------
from collections import deque
class Codec:
def serialize(self, root):
if not root:
return 'None'
root.left = self.serialize(root.left)
root.right = self.serialize(root.right)
return f"{root.val},{root.left},{root.right}"
def deserialize(self, data):
dq = deque(data.split(','))
def dfs(li):
val = li.popleft()
if val == "None":
return None
root = TreeNode(int(val))
root.left = dfs(li)
root.right = dfs(li)
return root
return dfs(dq)
*/.
# Type aliases
No description provided by the author