Skip to content

Commit e20ca4b

Browse files
committed
add trees solutions
1 parent d7568e2 commit e20ca4b

File tree

2 files changed

+92
-0
lines changed

2 files changed

+92
-0
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Definition for a binary tree node.
2+
# class TreeNode:
3+
# def __init__(self, x):
4+
# self.val = x
5+
# self.left = None
6+
# self.right = None
7+
8+
class Solution:
9+
def levelOrder(self, root: TreeNode) -> List[List[int]]:
10+
if root is None:
11+
return []
12+
13+
vals = []
14+
level = 0
15+
queue = [(root, level)]
16+
while queue:
17+
# dequeue
18+
node, level = queue.pop(0)
19+
if len(vals) < level + 1:
20+
vals.append([node.val])
21+
else:
22+
vals[level].append(node.val)
23+
24+
# enqueue
25+
if node.left:
26+
queue.append((node.left, level + 1))
27+
if node.right:
28+
queue.append((node.right, level + 1))
29+
return vals
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# Definition for a binary tree node.
2+
class TreeNode:
3+
def __init__(self, x):
4+
self.val = x
5+
self.left = None
6+
self.right = None
7+
8+
from math import inf
9+
class Codec:
10+
11+
def serialize(self, root: TreeNode) -> str:
12+
"""Encodes a tree to a single string.
13+
"""
14+
vals = []
15+
def pre_order(root):
16+
if root is None:
17+
return ""
18+
19+
vals.append(str(root.val))
20+
pre_order(root.left)
21+
pre_order(root.right)
22+
pre_order(root)
23+
return " ".join(vals)
24+
25+
def deserialize(self, data: str) -> TreeNode:
26+
"""Decodes your encoded data to tree.
27+
"""
28+
if not data:
29+
return None
30+
31+
queue = data.split(" ")
32+
33+
def helper(q, min_value, max_value):
34+
if not q:
35+
return
36+
37+
val = int(q[0])
38+
if val < min_value or val > max_value:
39+
return
40+
q.pop(0)
41+
root = TreeNode(val)
42+
root.left = helper(q, min_value, val)
43+
root.right = helper(q, val, max_value)
44+
return root
45+
return helper(queue, -inf, inf)
46+
47+
def pre_order(root):
48+
if root is None:
49+
return None
50+
print(root.val)
51+
pre_order(root.left)
52+
pre_order(root.right)
53+
54+
if __name__ == "__main__":
55+
56+
root = TreeNode(2)
57+
root.left = TreeNode(1)
58+
root.right = TreeNode(3)
59+
60+
codec = Codec()
61+
node = codec.deserialize(codec.serialize(root))
62+
63+
pre_order(node) # 2 1 3

0 commit comments

Comments
 (0)