2
2
"""
3
3
The class Node is used to create nodes of the Binary Tree.
4
4
5
- Agrs : Takes value x to create an object of Node with value x.
5
+ Agrs : Takes value x to create an object of Node with value x.
6
6
7
7
Returns : Creates new object of Node.
8
8
"""
9
9
class Node :
10
- def __init__ (self , x : int ):
11
- self .value = x
10
+ def __init__ (self , data : int )-> None :
11
+ self .value = data
12
12
self .left = None
13
13
self .right = None
14
14
15
15
def make_tree () -> Node | None :
16
16
r"""
17
- The Tree has :
17
+ The Tree has :
18
18
19
19
20
20
20
/ \
@@ -33,15 +33,20 @@ def make_tree() -> Node | None:
33
33
"""
34
34
Serialize Function takes root as a parameter and returns a String.
35
35
36
- Agrs :
37
- root : Takes root node as a parameter.
36
+ Agrs:
37
+ root : Takes root node as a parameter.
38
38
39
- Returns : A string of preorder traversal of nodes in a tree along with null values of leaf nodes.
39
+ Returns: A string of preorder traversal of nodes in tree
40
+ with null values of leaf nodes.
40
41
"""
41
42
42
43
def serialize (root : Node | None ) -> str | None :
43
- result = []
44
- def depth_first_search (node ):
44
+ """
45
+ >>> serialize(make_tree())
46
+ '20,2,N,N,13,4,N,N,5,N,N'
47
+ """
48
+ result = []
49
+ def depth_first_search (node )-> Node | None :
45
50
if not node :
46
51
result .append ("N" )
47
52
return
@@ -52,19 +57,25 @@ def depth_first_search(node):
52
57
return "," .join (result )
53
58
54
59
"""
55
- Deserialize Function takes String as a parameter and returns the root of the tree.
56
-
60
+ Deserialize Function takes String as a parameter and returns root of tree.
61
+
57
62
Agrs :
58
- String : Takes string of all node values with null values of leaf nodes separated by comma as a parameter.
63
+ String : Takes string of all node values with null values
64
+ of leaf nodes separated by comma as a parameter.
59
65
60
66
Returns : Root of the tree created after deserialing the string.
61
67
"""
62
68
63
- def deserialize (data : str | None ) -> Node | None :
69
+ def deserialize (data : str | None ) -> Node | None :
70
+ """
71
+ >>> root = deserialize("20,2,N,N,13,4,N,N,5,N,N")
72
+ >>> list(preorder(root))
73
+ [20, 2, 13, 4, 5]
74
+ """
64
75
global index
65
76
index = 0
66
77
node_values = data .split ("," )
67
- def depth_first_search ():
78
+ def depth_first_search () -> Node | None :
68
79
global index
69
80
if node_values [index ] == "N" :
70
81
index += 1
@@ -78,6 +89,12 @@ def depth_first_search():
78
89
79
90
#This method is written to traverse the tree created by deserialize method.
80
91
def preorder (root : Node | None ) -> Generator [int , None , None ]:
92
+ """
93
+ >>> list(preorder(make_tree()))
94
+ [20, 2, 13, 4, 5]
95
+ >>> list(preorder(None))
96
+ []
97
+ """
81
98
if root :
82
99
yield root .value
83
100
yield from preorder (root .left )
@@ -87,10 +104,10 @@ def main() -> None: # Main function for testing.
87
104
# Create binary tree.
88
105
root = make_tree ()
89
106
serialized_string = serialize (root )
90
- print (f"Serialized string : { serialized_string } \n " )
107
+ print (f"Serialized string : { serialized_string } " )
91
108
deserialized_root = deserialize (serialized_string )
92
109
print (f"The Deserialized Tree : { list (preorder (deserialized_root ))} " )
93
-
110
+
94
111
if __name__ == '__main__' :
95
112
import doctest
96
113
doctest .testmod ()
0 commit comments