示例#1
0
    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
示例#2
0
 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
示例#3
0
    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
示例#4
0
 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
示例#5
0
 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
示例#6
0
    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
示例#7
0
    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
示例#8
0
    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
示例#9
0
 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