def _left_rotate(node): ''' FIXME: Implement this function. The lecture videos provide a high-level overview of tree rotations, and the textbook provides full python code. The textbook's class hierarchy for their AVL tree code is fairly different from our class hierarchy, however, so you will have to adapt their code. ''' if node is None or node.right is None: return node new = Node(node.right.value) new.right = node.right.right leftnode = Node(node.value) leftnode.left = node.left leftnode.right = node.right.left new.left = leftnode return new
def _remove(node, value): if node is None: return if value > node.value and node.right: node.right = BST._remove(node.right, value) return node elif value < node.value and node.left: node.left = BST._remove(node.left, value) return node elif value == node.value: if node.left is None and node.right is None: return None elif node.left is None: return node.right elif node.right is None: return node.left else: smallest = BST._find_smallest(node.right) if smallest == node.right.value: ret = node.right ret.left = node.left else: ret = Node(smallest) ret.left = node.left ret.right = BST._remove(node.right, smallest) return ret else: return node
def _right_rotate(node): ''' FIXME: Implement this function. The lecture videos provide a high-level overview of tree rotations, and the textbook provides full python code. however, so you will have to adapt their code. ''' left = Node(node.left.value) left.left = node.left.left nr = Node(node.value) nr.right = node.right nr.left = node.left.right left.right = nr return left
def _right_rotate(node): if node is None or node.left is None: return node new_root = Node(node.left.value) new_root.left = node.left.left new_root.right = Node(node.value) new_root.right.right = node.right if node.left.right: new_root.right.left = node.left.right return new_root
def _left_rotate(node): if node is None or node.right is None: return node new = Node(node.right.value) new.right = node.right.right new.left = Node(node.value) new.left.left = node.left if node.right.left: new.left.right = node.right.left return new
def _right_rotate(node): ''' FIXME: Implement this function. The lecture videos provide a high-level overview of tree rotations, and the textbook provides full python code. ''' if node is None or node.left is None: return node noda = Node(node.left.value) noda.left = node.left.left node_right = Node(node.value) node_right.right = node.right node_right.left = node.left.right noda.right = node_right return noda
def _right_rotate(node): ''' FIXME: Implement this function. The lecture videos provide a high-level overview of tree rotations, and the textbook provides full python code. The textbook's class hierarchy for their AVL tree code is fairly different from our class hierarchy, however, so you will have to adapt their code. ''' if node.left: old_root = Node(node.value) old_root.right = node.right old_root.left = node.left.right new_root = Node(node.left.value) new_root.left = node.left.left new_root.right = old_root else: new_root = node return new_root
def _insert(root: Node, number: int): if root is None: root = Node(number) return root else: if root.value == number: return root elif number < root.value: root.left = BST._insert(root.left, number) else: root.right = BST._insert(root.right, number) return root
def _left_rotate(node): ''' FIXME: Implement this function. The lecture videos provide a high-level overview of tree rotations, and the textbook provides full python code. The textbook's class hierarchy for their AVL tree code is fairly different from our class hierarchy, however, so you will have to adapt their code. ''' assert(node.right is not None) root = Node(node.right.value) root.right = node.right.right root.left = Node(node.value) root.left.left = node.left root.left.right = node.right.left return root
def _right_rotate(node): ''' FIXME: Implement this function. The lecture videos provide a high-level overview of tree rotations, and the textbook provides full python code. The textbook's class hierarchy for their AVL tree code is fairly different from our class hierarchy, however, so you will have to adapt their code. ''' swap = AVLTree._copy_nodes(node.left.right) newnode = Node(node.left.value) newnode.left = AVLTree._copy_nodes(node.left.left) newnode.right = AVLTree._copy_nodes(node) newnode.right.left = swap return newnode