From dbfdf7df8e275cc100609a6dd2181d1531a9d5f5 Mon Sep 17 00:00:00 2001
From: "iliya.saroukha" <iliya.saroukhanian@etu.hesge.ch>
Date: Thu, 10 Apr 2025 19:04:15 +0200
Subject: [PATCH] wip: find_char

---
 dyn_huffman.py | 40 +++++++++++++++++++++++++++++++++-------
 1 file changed, 33 insertions(+), 7 deletions(-)

diff --git a/dyn_huffman.py b/dyn_huffman.py
index 0e26050..96a9b17 100644
--- a/dyn_huffman.py
+++ b/dyn_huffman.py
@@ -1,4 +1,5 @@
 from __future__ import annotations
+import code
 from dataclasses import dataclass
 import numpy as np
 import pprint
@@ -12,6 +13,7 @@ DICT_ALPHABET = {item: index + 1 for index, item in enumerate(LIST_ALPHABET)}
 @dataclass
 class Node:
     weight: int = 0
+    nyt_code: str | None = None
     value: str | None = "NYT"
     left: Node | None = None
     right: Node | None = None
@@ -25,7 +27,24 @@ def swap(tree: Node):
             tree.right = tree.left
             tree.left = tmp
 
-def insert_char(tree: Node, char: str):
+
+def find_char(tree: Node, char: str) -> Node | None:
+    if tree:
+        if tree.right:
+            _ = find_char(tree.right, char)
+
+        if tree.left:
+            _ = find_char(tree.left, char)
+
+        if tree.value == char:
+            print(tree)
+            return tree
+        else:
+            return None
+
+
+
+def insert_char(tree: Node, char: str, nyt_code = ''):
     if tree.left:
         if tree.left.value == char:
             tree.left.weight += 1
@@ -35,16 +54,16 @@ def insert_char(tree: Node, char: str):
     # Leaf case
     if tree.left == None and tree.right == None:
         tree.left = Node()
-        tree.right = Node(value=char, weight=1)
+        tree.right = Node(value=char, weight=1, nyt_code=nyt_code)
         tree.weight += 1
         return
     
     if tree.left:
         if tree.left.value == 'NYT':
-            insert_char(tree.left, char)
+            insert_char(tree.left, char, nyt_code + '0')
         else:
             if tree.right:
-                insert_char(tree.right, char)
+                insert_char(tree.right, char, nyt_code + '1')
 
     tree.weight += 1
     swap(tree)
@@ -75,16 +94,23 @@ def compute_code(char: str):
 
 def main(string: str) -> None:
     tree = Node()
-    enc = []
+    fixed_code = []
+
+    for c in string:
+        fixed_code.append(compute_code(c))
+    
+    pprint.pp(fixed_code)
 
     for c in string:
         pprint.pp(tree)
         print(f'\n====== Inserting \'{c}\' ======\n')
         insert_char(tree, c)
-        enc.append(compute_code(c))
 
     pprint.pp(tree)
-    pprint.pp(enc)
+
+    n = find_char(tree, 'k')
+
+    pprint.pp(n)
 
 
 if __name__ == "__main__":
-- 
GitLab