def __delitem__(self, k): if not self.is_empty(): p = self._subtree_search(self.root(), k) if k == p.key(): self.delete(p) return raise Empty('Tree is empty')
def __getitem__(self, k): if self.is_empty(): raise Empty('Tree is empty') else: p = self._subtree_search(self.root(), k) if k != p.key(): raise KeyError('Key Error: ' + repr(k)) return p.value()
def dequeue(self): if self.is_empty(): raise Empty('Queue is empty') removed = self._head._element self._head = self._head._next self._size -= 1 if self.is_empty(): self._tail = None return removed
def find_gt(self, k): if self.is_empty(): raise Empty("Tree is empty") else: p = self.find_position(k) if not k < p.key(): p = self.after(p) if p is None: return None else: return (p.key(), p.value())
def find_lt(self, k): if self.is_empty(): raise Empty("Tree is empty") else: p = self.find_position(k) if not p.key() < k: p = self.before(p) if p is None: return None else: return (p.key(), p.value())
def find_range(self, start_k, stop_k): if not self.is_empty(): if start_k is None: p = self.first() else: p = self.find_position(start_k) if p.key() < start_k: p = self.after(p) while p is not None and (stop_k is None or p.key() < stop_k): yield (p.key(), p.value()) p = self.after(p) raise Empty("Tree is empty")
def first(self): if self.is_empty(): raise Empty('Queue is empty') return self._head._element
def find_max(self): if self.is_empty(): raise Empty("Tree is empty") else: p = self.last() return (p.key(), p.value())