1414"""
1515from __future__ import annotations
1616
17- from typing import Optional
18-
1917
2018class Node :
2119 def __init__ (self , data : int ) -> None :
2220 self .data : int = data
23- self .left : Optional [ Node ] = None
24- self .right : Optional [ Node ] = None
21+ self .left : Node | None = None
22+ self .right : Node | None = None
2523
2624
2725class BST :
2826 def __init__ (self ) -> None :
29- self .root : Optional [ Node ] = None
27+ self .root : Node | None = None
3028
31- def get_root (self ) -> Optional [ Node ] :
29+ def get_root (self ) -> Node | None :
3230 return self .root
3331
3432 def size (self ) -> int :
3533 """Return the number of nodes in the tree. Complexity: O(n)."""
3634 return self ._recur_size (self .root )
3735
38- def _recur_size (self , root : Optional [ Node ] ) -> int :
36+ def _recur_size (self , root : Node | None ) -> int :
3937 if root is None :
4038 return 0
4139 return 1 + self ._recur_size (root .left ) + self ._recur_size (root .right )
@@ -44,7 +42,7 @@ def search(self, data: int) -> bool:
4442 """Return True if data exists in the tree. Complexity: O(log n) average."""
4543 return self ._recur_search (self .root , data )
4644
47- def _recur_search (self , root : Optional [ Node ] , data : int ) -> bool :
45+ def _recur_search (self , root : Node | None , data : int ) -> bool :
4846 if root is None :
4947 return False
5048 if root .data == data :
@@ -55,7 +53,11 @@ def _recur_search(self, root: Optional[Node], data: int) -> bool:
5553 return self ._recur_search (root .left , data )
5654
5755 def insert (self , data : int ) -> bool :
58- """Insert data into the tree. Return False if data already exists. Complexity: O(log n) average."""
56+ """Insert data into the tree.
57+
58+ Return False if data already exists.
59+ Complexity: O(log n) average.
60+ """
5961 if self .root :
6062 return self ._recur_insert (self .root , data )
6163 else :
@@ -78,7 +80,7 @@ def _recur_insert(self, root: Node, data: int) -> bool:
7880 root .right = Node (data )
7981 return True
8082
81- def preorder (self , root : Optional [ Node ] ) -> list [int ]:
83+ def preorder (self , root : Node | None ) -> list [int ]:
8284 """Return list of node values in preorder (root, left, right)."""
8385 result : list [int ] = []
8486 if root :
@@ -87,7 +89,7 @@ def preorder(self, root: Optional[Node]) -> list[int]:
8789 result .extend (self .preorder (root .right ))
8890 return result
8991
90- def inorder (self , root : Optional [ Node ] ) -> list [int ]:
92+ def inorder (self , root : Node | None ) -> list [int ]:
9193 """Return list of node values in inorder (left, root, right)."""
9294 result : list [int ] = []
9395 if root :
@@ -96,7 +98,7 @@ def inorder(self, root: Optional[Node]) -> list[int]:
9698 result .extend (self .inorder (root .right ))
9799 return result
98100
99- def postorder (self , root : Optional [ Node ] ) -> list [int ]:
101+ def postorder (self , root : Node | None ) -> list [int ]:
100102 """Return list of node values in postorder (left, right, root)."""
101103 result : list [int ] = []
102104 if root :
0 commit comments