Skip to content

Commit 54fcb0f

Browse files
committed
feat: solve DaleStudy#288 with python
1 parent e4e23ac commit 54fcb0f

File tree

1 file changed

+65
-0
lines changed
  • serialize-and-deserialize-binary-tree

1 file changed

+65
-0
lines changed
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
from typing import Optional
2+
3+
4+
# Definition for a binary tree node.
5+
class TreeNode:
6+
def __init__(self, val=0, left=None, right=None):
7+
self.val = val
8+
self.left = left
9+
self.right = right
10+
11+
12+
class Codec:
13+
"""
14+
Runtime: 76 ms (Beats 85.72%)
15+
Time Complexity: O(n)
16+
> dfs를 통해 모든 node를 방문하므로, O(n)
17+
18+
Memory: 21.40 MB (Beats 12.82%)
19+
Space Complexity: O(n)
20+
> 일반적인 경우 트리의 깊이만큼 dfs 호출 스택이 쌓이나, 최악의 경우 한쪽으로 편향되었다면 트리의 깊이가 n이 될 수 있으므로 O(n), upper bound
21+
"""
22+
23+
def serialize(self, root):
24+
"""Encodes a tree to a single string.
25+
26+
:type root: TreeNode
27+
:rtype: str
28+
"""
29+
30+
def dfs(node: Optional[TreeNode]) -> None:
31+
if node is None:
32+
result.append("null")
33+
return
34+
result.append(str(node.val))
35+
dfs(node.left)
36+
dfs(node.right)
37+
38+
result = []
39+
dfs(root)
40+
return ','.join(result)
41+
42+
def deserialize(self, data):
43+
"""Decodes your encoded data to tree.
44+
45+
:type data: str
46+
:rtype: TreeNode
47+
"""
48+
49+
def dfs() -> Optional[TreeNode]:
50+
val = next(values)
51+
if val == "null":
52+
return None
53+
node = TreeNode(int(val))
54+
node.left = dfs()
55+
node.right = dfs()
56+
return node
57+
58+
values = iter(data.split(','))
59+
return dfs()
60+
61+
62+
# Your Codec object will be instantiated and called as such:
63+
# ser = Codec()
64+
# deser = Codec()
65+
# ans = deser.deserialize(ser.serialize(root))

0 commit comments

Comments
 (0)