Skip to content

Commit bb518af

Browse files
committed
Add solutions
1 parent 98b460b commit bb518af

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

dailycodingproblem/day_3.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
class Node():
2+
def __init__(self, value, left=None, right=None):
3+
self.value = value
4+
self.left = left
5+
self.right = right
6+
7+
def serialize_to_list(self, sentinel=None):
8+
serial = [self.value]
9+
if self.left:
10+
serial.extend(self.left.serialize(sentinel))
11+
else:
12+
serial.append(sentinel)
13+
if self.right:
14+
serial.extend(self.right.serialize(sentinel))
15+
else:
16+
serial.append(sentinel)
17+
return serial
18+
19+
def serialize_to_tuple(self):
20+
return repr(self)
21+
22+
@classmethod
23+
def deserialize_from_tuple(cls, source):
24+
from ast import literal_eval as make_tuple
25+
26+
def _tuple_to_node(tup):
27+
value, left, right = tup
28+
node = cls(value)
29+
if isinstance(left, tuple):
30+
node.left = _tuple_to_node(left)
31+
else:
32+
node.left = left
33+
if isinstance(right, tuple):
34+
node.right = _tuple_to_node(right)
35+
else:
36+
node.right = right
37+
return node
38+
39+
return _tuple_to_node(make_tuple(source))
40+
41+
def __repr__(self):
42+
return '({!r}, {!r}, {!r})'.format(self.value, self.left, self.right)
43+
44+
45+
def main():
46+
node = Node('root', Node('left', Node('left.left')), Node('right'))
47+
48+
ser = node.serialize_to_tuple()
49+
deser = Node.deserialize_from_tuple(ser)
50+
51+
print('ASSERT:', deser.left.left.value == 'left.left')
52+
53+
print('# TODO: Deserialize from list.')
54+
55+
56+
if __name__ == '__main__':
57+
main()

0 commit comments

Comments
 (0)