From ed5b96ba731430d0270ea45008e562dbe96102e7 Mon Sep 17 00:00:00 2001 From: Fiqqar <145265758+Fiqqar@users.noreply.github.com> Date: Sat, 4 Oct 2025 18:45:45 +0700 Subject: [PATCH 1/6] alg [pepeny] new alg binary tree --- height_of_tree/__init__.py | 0 height_of_tree/tree.py | 49 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 height_of_tree/__init__.py create mode 100644 height_of_tree/tree.py diff --git a/height_of_tree/__init__.py b/height_of_tree/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/height_of_tree/tree.py b/height_of_tree/tree.py new file mode 100644 index 000000000000..4c2f97d0678a --- /dev/null +++ b/height_of_tree/tree.py @@ -0,0 +1,49 @@ +class Node: + def __init__(self, info): + self.info = info + self.left = None + self.right = None + + def __str__(self): + return str(self.info) + + +class BinarySearchTree: + def __init__(self): + self.root = None + + def create(self, val): + if self.root == None: + self.root = Node(val) + else: + current = self.root + while True: + if val < current.info: + if current.left: + current = current.left + else: + current.left = Node(val) + break + elif val > current.info: + if current.right: + current = current.right + else: + current.right = Node(val) + break + else: + break + +def height(node): + if node is None: + return -1 + return 1 + max(height(node.left), height(node.right)) + +def tree_height_from_list(data): + bst = BinarySearchTree() + for x in data: + bst.create(x) + return height(bst.root) + +if __name__ == "__main__": + import doctest + doctest.testmod() From 5c688df0f8b25294cd7867f70de156aa6898e9c4 Mon Sep 17 00:00:00 2001 From: Fiqqar <145265758+Fiqqar@users.noreply.github.com> Date: Sat, 4 Oct 2025 18:57:33 +0700 Subject: [PATCH 2/6] fix typo --- height_of_tree/tree.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/height_of_tree/tree.py b/height_of_tree/tree.py index 4c2f97d0678a..bc00bea55359 100644 --- a/height_of_tree/tree.py +++ b/height_of_tree/tree.py @@ -13,7 +13,7 @@ def __init__(self): self.root = None def create(self, val): - if self.root == None: + if self.root is None: self.root = Node(val) else: current = self.root @@ -39,6 +39,14 @@ def height(node): return 1 + max(height(node.left), height(node.right)) def tree_height_from_list(data): + """ + >>> tree_height_from_list([3,2,5,6]) + 2 + >>> tree_height_from_list([1]) + 0 + >>> tree_height_from_list([5,1,10,15,7]) + 3 + """ bst = BinarySearchTree() for x in data: bst.create(x) From 82d8cd80204e6084445d8e247a1dc80d29acc630 Mon Sep 17 00:00:00 2001 From: Fiqqar <145265758+Fiqqar@users.noreply.github.com> Date: Sat, 4 Oct 2025 19:59:54 +0700 Subject: [PATCH 3/6] new tre algorithm --- .../__init__.py => height_tree/__init.py | 0 {height_of_tree => height_tree}/tree.py | 55 ++++++++++++++----- 2 files changed, 41 insertions(+), 14 deletions(-) rename height_of_tree/__init__.py => height_tree/__init.py (100%) rename {height_of_tree => height_tree}/tree.py (54%) diff --git a/height_of_tree/__init__.py b/height_tree/__init.py similarity index 100% rename from height_of_tree/__init__.py rename to height_tree/__init.py diff --git a/height_of_tree/tree.py b/height_tree/tree.py similarity index 54% rename from height_of_tree/tree.py rename to height_tree/tree.py index bc00bea55359..0fe61e6e6244 100644 --- a/height_of_tree/tree.py +++ b/height_tree/tree.py @@ -1,18 +1,31 @@ class Node: - def __init__(self, info): - self.info = info - self.left = None - self.right = None + def __init__(self, info: int) -> None: + self.info = info + self.left: Node | None = None + self.right: Node | None = None - def __str__(self): - return str(self.info) + def __str__(self) -> str: + """ + >>> str(Node(5)) + '5' + """ + return str(self.info) class BinarySearchTree: - def __init__(self): - self.root = None + def __init__(self) -> None: + self.root: Node | None = None - def create(self, val): + def create(self, val: int) -> None: + """ + >>> bst = BinarySearchTree() + >>> bst.create(10) + >>> bst.root.info + 10 + >>> bst.create(5) + >>> bst.root.left.info + 5 + """ if self.root is None: self.root = Node(val) else: @@ -33,25 +46,39 @@ def create(self, val): else: break -def height(node): + +def height(node: Node | None) -> int: + """ + >>> height(None) + -1 + >>> n = Node(3) + >>> height(n) + 0 + >>> n.left = Node(2) + >>> n.right = Node(5) + >>> n.right.right = Node(6) + >>> height(n) + 2 + """ if node is None: return -1 return 1 + max(height(node.left), height(node.right)) -def tree_height_from_list(data): + +def tree_height_from_list(data: list[int]) -> int: """ >>> tree_height_from_list([3,2,5,6]) 2 >>> tree_height_from_list([1]) 0 - >>> tree_height_from_list([5,1,10,15,7]) - 3 """ bst = BinarySearchTree() for x in data: bst.create(x) return height(bst.root) + if __name__ == "__main__": import doctest - doctest.testmod() + + doctest.testmod() \ No newline at end of file From 5c00cfb4b322fdce9d864418d1c54e591c89161c Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 4 Oct 2025 13:01:22 +0000 Subject: [PATCH 4/6] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- height_tree/tree.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/height_tree/tree.py b/height_tree/tree.py index 0fe61e6e6244..d87806b7d2d4 100644 --- a/height_tree/tree.py +++ b/height_tree/tree.py @@ -81,4 +81,4 @@ def tree_height_from_list(data: list[int]) -> int: if __name__ == "__main__": import doctest - doctest.testmod() \ No newline at end of file + doctest.testmod() From 69e23064aafabff406972d2a1182623d29bee52f Mon Sep 17 00:00:00 2001 From: Wfiq <145265758+Fiqqar@users.noreply.github.com> Date: Sat, 4 Oct 2025 20:06:26 +0700 Subject: [PATCH 5/6] Rename __init.py to __init__.py --- height_tree/__init.py | 0 height_tree/__init__.py | 1 + 2 files changed, 1 insertion(+) delete mode 100644 height_tree/__init.py create mode 100644 height_tree/__init__.py diff --git a/height_tree/__init.py b/height_tree/__init.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/height_tree/__init__.py b/height_tree/__init__.py new file mode 100644 index 000000000000..d3f5a12faa99 --- /dev/null +++ b/height_tree/__init__.py @@ -0,0 +1 @@ + From ac3f11a314f8f7e3c03bbfaba70fefd0003a76df Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 4 Oct 2025 13:06:45 +0000 Subject: [PATCH 6/6] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- height_tree/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/height_tree/__init__.py b/height_tree/__init__.py index d3f5a12faa99..e69de29bb2d1 100644 --- a/height_tree/__init__.py +++ b/height_tree/__init__.py @@ -1 +0,0 @@ -