From 14a01c92d5124dfae7654574bb7da1cfd59b0a51 Mon Sep 17 00:00:00 2001 From: Raphael Roberts Date: Mon, 11 Nov 2019 16:21:56 -0600 Subject: [PATCH] I want to try and figure out the balance method myself. --- .gitignore | 2 ++ BST.py | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 .gitignore create mode 100644 BST.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..953cd6f --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.tar.gz +/9780596000851-master/ diff --git a/BST.py b/BST.py new file mode 100644 index 0000000..846c46f --- /dev/null +++ b/BST.py @@ -0,0 +1,85 @@ +class BSTNode: + def __init__(self, value): + self.value = value + self.left = None + self.right = None + + +class BST: + def __init__(self): + self.root = None + self.size = 0 + + def clear(self): + self.root = None + self.size = 0 + + def add(self, value): + to_add = BSTNode(value) + if self.root is None: + self.root = to_add + self.size += 1 + else: + current = self.root + parent = None + while current is not None: + if value > current.value: + parent = current + current = current.right + elif value < current.value: + parent = current + current = current.left + else: + return + if value > parent.value: + parent.right = to_add + else: + parent.left = to_add + self.size += 1 + + def inOrder(self): + ret = [] + inOrderRec(self.root, ret) + return ret + + @classmethod + def balance(cls, list_param): + tree = cls() + add_rec(0, len(list_param) // 2, len(list_param), list_param, tree) + return tree + + +iteration_count = 0 + + +def inOrderRec(top, ret): + if top is None: + return + if top.left: + inOrderRec(top.left, ret) + ret.append(top) + if top.right: + inOrderRec(top.right, ret) + + +def add_rec(start, mid, end, list_param, tree: BST): + global iteration_count + iteration_count += 1 + if iteration_count < 60: + if start != mid and mid != end: + print(mid) + add_rec(start, (start + mid) // 2, mid, list_param, tree) + tree.add(list_param[mid]) + add_rec(mid, (mid + end) // 2, end, list_param, tree) + else: + breakpoint() + + +if __name__ == "__main__": + list_param = list(range(17)) + tree = BST.balance(list_param) + tree2 = BST() + for i in range(17): + tree2.add(i) + r = list(node.value for node in tree.inOrder()) + r2 = list(node.value for node in tree2.inOrder())