Skip to content

Commit 606c7e8

Browse files
committedNov 8, 2020
feat: serialize-and-deserialize-binary-tree
1 parent 6f80f1e commit 606c7e8

File tree

2 files changed

+99
-0
lines changed

2 files changed

+99
-0
lines changed
 

‎recs.minimum-depth-of-binary-tree.py

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
from collections import deque
2+
3+
class TreeNode:
4+
def __init__(self, x):
5+
self.val = x
6+
self.left = None
7+
self.right = None
8+
9+
class Solution:
10+
"""
11+
111. 二叉树的最小深度
12+
https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/
13+
给定一个二叉树,找出其最小深度。
14+
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
15+
说明:叶子节点是指没有子节点的节点。
16+
"""
17+
# 广度优先
18+
def minDepth(self, root: TreeNode) -> int:
19+
if not root:
20+
return 0
21+
22+
queue = deque([(root, 1)])
23+
while queue:
24+
node, depth = queue.popleft()
25+
if not node.left and not node.right:
26+
return depth
27+
28+
if node.left:
29+
queue.append((node.left, depth + 1))
30+
31+
if node.right:
32+
queue.append((node.right, depth + 1))
33+
34+
return 0
35+
36+
37+
# 递归
38+
def minDepthByRecursive(self, root: TreeNode) -> int:
39+
if not root:
40+
return 0
41+
42+
m1 = self.minDepth(root.left)
43+
m2 = self.minDepth(root.right)
44+
45+
if not root.left or not root.right:
46+
return m1 + m2 + 1
47+
48+
return min(self.minDepth(root.left), self.minDepth(root.right))+ 1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
2+
class TreeNode(object):
3+
def __init__(self, x):
4+
self.val = x
5+
self.left = None
6+
self.right = None
7+
8+
class Codec:
9+
"""
10+
297. 二叉树的序列化与反序列化
11+
https://leetcode-cn.com/problems/serialize-and-deserialize-binary-tree/
12+
序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。
13+
请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。
14+
"""
15+
def serialize(self, root):
16+
"""Encodes a tree to a single string.
17+
18+
:type root: TreeNode
19+
:rtype: str
20+
"""
21+
if not root:
22+
return 'null,'
23+
24+
left = self.serialize(root.left)
25+
right = self.serialize(root.right)
26+
return str(root.val) + ',' + left + right
27+
28+
29+
def deserialize(self, data):
30+
"""Decodes your encoded data to tree.
31+
32+
:type data: str
33+
:rtype: TreeNode
34+
"""
35+
l = data.split(',')
36+
return self.build_tree(l)
37+
38+
def build_tree(self, data):
39+
if not data:
40+
return
41+
val = data.pop(0)
42+
if val == 'null': return None
43+
node = TreeNode(val)
44+
node.left = self.build_tree(data)
45+
node.right = self.build_tree(data)
46+
return node
47+
48+
so = Codec()
49+
50+
print(so.serialize(so.deserialize('1,2,3,null,null,4,5')))
51+

0 commit comments

Comments
 (0)
Please sign in to comment.