1
1
from __future__ import annotations
2
2
3
+
3
4
class TreeNode :
4
5
"""
5
6
A binary tree node has a value, left child, and right child.
@@ -10,7 +11,12 @@ class TreeNode:
10
11
right: The right child of the node.
11
12
"""
12
13
13
- def __init__ (self , val : int = 0 , left :TreeNode = None , right :TreeNode = None ) -> None :
14
+ def __init__ (
15
+ self ,
16
+ val : int = 0 ,
17
+ left : TreeNode | None = None ,
18
+ right : TreeNode | None = None ,
19
+ ) -> None :
14
20
if not isinstance (val , int ):
15
21
raise TypeError ("Value must be an integer." )
16
22
self .val = val
@@ -19,7 +25,7 @@ def __init__(self, val: int = 0, left:TreeNode = None, right:TreeNode = None) ->
19
25
20
26
21
27
# Helper functions
22
- def are_trees_identical (root1 : TreeNode , root2 : TreeNode ) -> bool :
28
+ def are_trees_identical (root1 : TreeNode | None , root2 : TreeNode | None ) -> bool :
23
29
"""
24
30
Check if two binary trees are identical.
25
31
@@ -61,7 +67,7 @@ def are_trees_identical(root1: TreeNode, root2: TreeNode) -> bool:
61
67
62
68
63
69
# Main functions
64
- def serialize (root : TreeNode ) -> str :
70
+ def serialize (root : TreeNode | None ) -> str :
65
71
"""
66
72
Serialize a binary tree to a string using preorder traversal.
67
73
@@ -90,7 +96,7 @@ def serialize(root: TreeNode) -> str:
90
96
return str (root .val ) + "," + serialize (root .left ) + "," + serialize (root .right )
91
97
92
98
93
- def deserialize (data : str ) -> TreeNode :
99
+ def deserialize (data : str ) -> TreeNode | None :
94
100
"""
95
101
Deserialize a string to a binary tree.
96
102
@@ -115,12 +121,19 @@ def deserialize(data: str) -> TreeNode:
115
121
>>> deserialized = deserialize(dummy_data)
116
122
>>> are_trees_identical(root, deserialized)
117
123
False
124
+ >>> deserialize("")
125
+ Traceback (most recent call last):
126
+ ...
127
+ ValueError: Data cannot be empty.
118
128
"""
119
129
130
+ if data == "" :
131
+ raise ValueError ("Data cannot be empty." )
132
+
120
133
# Split the serialized string by comma to get node values
121
134
nodes = data .split ("," )
122
135
123
- def build_tree () -> TreeNode :
136
+ def build_tree () -> TreeNode | None :
124
137
# Get the next value from the list
125
138
val = nodes .pop (0 )
126
139
0 commit comments