Binary Search Trees
Implementing BSTs
Here’s the BST code we saw in class.
class BSTNode: def __init__(self, data, parent=None, left=None, right=None): self.data = data self.parent = parent self.left = left self.right = right class BST: def __init__(self): self.root = None def add_to(self, node, value): if node.data == value: return elif value < node.data: if node.left: self.add_to(node.left, value) else: node.left = BSTNode(value, node) else: if node.right: self.add_to(node.right, value) else: node.right = BSTNode(value, node) def add(self, value): if not self.root: self.root = BSTNode(value) else: self.add_to(self.root, value) def find_at(self, node, value) -> BSTNode: if node.data == value: return node elif value < node.data and node.left: return self.find_at(node.left, value) elif value > node.data and node.right: return self.find_at(node.right, value) return None def find(self, value) -> BSTNode: if not self.root: return None return self.find_at(self.root, value) def to_list_at(self, node): if notq node: return [] return self.to_list_at(node.left) + [node.data] + self.to_list_at(node.right) def to_list(self): return self.to_list_at(self.root)
Binary search trees: removing nodes
Last time we saw binary search trees, and discussed both (1) searching for a value in the tree and (2) adding a value to the tree. How would we remove a node from the tree? It’s going to depend on the type of node. See the lecture capture for details.