1010"""
1111
1212from typing import Optional
13+ from dataclasses import dataclass , field
1314
1415
16+ @dataclass
1517class TreeNode :
1618 """
1719 Initialize a TreeNode.
@@ -30,14 +32,19 @@ class TreeNode:
3032 2
3133 """
3234
33- def __init__ (
34- self , name_value : str , num_occur : int , parent_node : Optional ["TreeNode" ] = None
35- ) -> None :
36- self .name = name_value
37- self .count = num_occur
38- self .node_link = None # Initialize node_link to None
39- self .parent = parent_node
40- self .children : dict [str , TreeNode ] = {}
35+ # def __init__(
36+ # self, name_value: str, num_occur: int, parent_node: Optional["TreeNode"] = None
37+ # ) -> None:
38+ # self.name = name_value
39+ # self.count = num_occur
40+ # self.node_link = TreeNode | None # Initialize node_link to None
41+ # self.parent = parent_node
42+ # self.children: dict[str, TreeNode] = {}
43+ name : str
44+ count : int
45+ node_link : Optional ['TreeNode' ] = None # Initialize node_link to None
46+ parent : Optional ["TreeNode" ] = None
47+ children : dict [str , "TreeNode" ] = field (default_factory = dict )
4148
4249 def inc (self , num_occur : int ) -> None :
4350 self .count += num_occur
@@ -50,7 +57,7 @@ def disp(self, ind: int = 1) -> None:
5057
5158def create_tree (data_set : list , min_sup : int = 1 ) -> tuple [TreeNode , dict ]:
5259 """
53- Create FP tree
60+ Create Frequent Pattern tree
5461
5562 Args:
5663 data_set (list): A list of transactions, where each transaction
@@ -193,10 +200,7 @@ def update_header(node_to_test: TreeNode, target_node: TreeNode) -> TreeNode:
193200 while node_to_test .node_link is not None :
194201 node_to_test = node_to_test .node_link
195202 if node_to_test .node_link is None :
196- node_to_test .node_link = TreeNode (
197- target_node .name , target_node .count , node_to_test
198- )
199- # Return the updated node
203+ node_to_test .node_link = target_node
200204 return node_to_test
201205
202206
@@ -298,6 +302,7 @@ def mine_tree(
298302 >>> all(expected in frequent_itemsets for expected in expe_itm)
299303 True
300304 """
305+ new_head : Optional ['TreeNode' ] = None
301306 sorted_items = sorted (header_table .items (), key = lambda item_info : item_info [1 ][0 ])
302307 big_l = [item [0 ] for item in sorted_items ]
303308 for base_pat in big_l :
@@ -311,6 +316,7 @@ def mine_tree(
311316 header_table [base_pat ][1 ] = update_header (
312317 header_table [base_pat ][1 ], my_cond_tree
313318 )
319+ my_head = new_head
314320 mine_tree (my_cond_tree , my_head , min_sup , new_freq_set , freq_item_list )
315321
316322
0 commit comments