Пример #1
0
 def _insert(node, value, insert_path):
     '''
     Helper function for insert
     '''
     # insert value
     if insert_path[0] == '0':
         if not node.left:
             node.left = Node(value)
         else:
             node.left = Heap._insert(node.left, value, insert_path[1:])
     if insert_path[0] == '1':
         if not node.right:
             node.right = Node(value)
         else:
             node.right = Heap._insert(node.right, value, insert_path[1:])
     # swap
     if insert_path[0] == '0':
         if node.left.value < node.value:
             temp = node.value
             node.value = node.left.value
             node.left.value = temp
             return node
         else:
             return node
     if insert_path[0] == '1':
         if node.right.value < node.value:
             temp = node.value
             node.value = node.right.value
             node.right.value = temp
             return node
         else:
             return node
Пример #2
0
 def _insert(node, value, numlist):
     if numlist[0] == '0':
         if node.left is None:
             node.left = Node(value)
         else:
             node.left = Heap._insert(node.left, value, numlist[1:])
     if numlist[0] == '1':
         if node.right is None:
             node.right = Node(value)
         else:
             node.right = Heap._insert(node.right, value, numlist[1:])
     if numlist[0] == '0':
         if node.left.value < node.value:
             newnode = node.value
             node.value = node.left.value
             node.left.value = newnode
             return node
         else:
             return node
     if numlist[0] == '1':
         if node.right.value < node.value:
             newnode = node.value
             node.value = node.right.value
             node.right.value = newnode
             return node
         else:
             return node
Пример #3
0
def test__AVLTree_is_avl_satisified2():
    avl = AVLTree()
    avl.root = Node(0)
    avl.root.right = Node(1)
    avl.root.right.right = Node(2)
    assert avl.is_bst_satisfied()
    assert not avl.is_avl_satisfied()
Пример #4
0
def test__AVLTree_is_avl_satisified0():
    avl = AVLTree()
    avl.root = Node(0)
    avl.root.left = Node(-1)
    avl.root.left.left = Node(-2)
    assert avl.is_bst_satisfied()
    assert not avl.is_avl_satisfied()
Пример #5
0
 def _insert(node, value, line):
     '''
     '''
     if line[0] == '0':
         if not node.left:
             node.left = Node(value)
         else:
             node.left = Heap._insert(node.left, value, line[1:])
     if line[0] == '0':
         if node.left.value < node.value:
             tmp = node.value
             node.value = node.left.value
             node.left.value = tmp
             return node
         else:
             return node
     if line[0] == '1':
         if not node.right:
             node.right = Node(value)
         else:
             node.right = Heap._insert(node.right, value, line[1:])
     if line[0] == '1':
         if node.right.value < node.value:
             tmp = node.value
             node.value = node.right.value
             node.right.value = tmp
             return node
         else:
             return node
Пример #6
0
 def _insert(node, value, binarycount):
     if binarycount[0] == '0':
         if not node.left:
             node.left = Node(value)
         else:
             node.left = Heap._insert(node.left, value, binarycount[1:])
     if binarycount[0] == '1':
         if not node.right:
             node.right = Node(value)
         else:
             node.right = Heap._insert(node.right, value, binarycount[1:])
     if binarycount[0] == '0':
         if node.left.value < node.value:
             switch = node.value
             node.value = node.left.value
             node.left.value = switch
             return node
         else:
             return node
     if binarycount[0] == '1':
         if node.right.value < node.value:
             switch = node.value
             node.value = node.right.value
             node.right.value = switch
             return node
         else:
             return node
Пример #7
0
 def _insert(node, position, value):
     if position[0] == '0':
         if not node.left:
             node.left = Node(value)
         else:
             node.left = Heap._insert(node.left, position[1:], value)
     if position[0] == '1':
         if not node.right:
             node.right = Node(value)
         else:
             node.right = Heap._insert(node.right, position[1:], value)
     if position[0] == '0':
         if node.value > node.left.value:
             tempval = node.value
             node.value = node.left.value
             node.left.value = tempval
             return node
         else:
             return node
     if position[0] == '1':
         if node.value > node.right.value:
             tempval = node.value
             node.value = node.right.value
             node.right.value = tempval
             return node
         else:
             return node
Пример #8
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
Пример #9
0
 def _insert(value, node, binarynum):
     if binarynum[0] == '0':
         if not node.left:
             node.left = Node(value)
         else:
             node.left = Heap._insert(value, node.left, binarynum[1:])
     if binarynum[0] == '1':
         if not node.right:
             node.right = Node(value)
         else:
             node.right = Heap._insert(value, node.right, binarynum[1:])
     if binarynum[0] == '0':
         if node.left.value < node.value:
             temp = node.value
             node.value = node.left.value
             node.left.value = temp
             return node
         else:
             return node
     if binarynum[0] == '1':
         if node.right.value < node.value:
             temp = node.value
             node.value = node.right.value
             node.right.value = temp
             return node
         else:
             return node
Пример #10
0
 def _insert(node, value, insert_p):
     if insert_p[0] == '1':
         if not node.right:
             node.right = Node(value)
         else:
             node.right = Heap._insert(node.right, value, insert_p[1:])
     if insert_p[0] == '0':
         if not node.left:
             node.left = Node(value)
         else:
             node.left = Heap._insert(node.left, value, insert_p[1:])
     if insert_p[0] == '1':
         if node.right.value < node.value:
             placeholder = node.value
             node.value = node.right.value
             node.right.value = placeholder
             return node
         else:
             return node
     if insert_p[0] == '0':
         if node.left.value < node.value:
             placeholder = node.value
             node.value = node.left.value
             node.left.value = placeholder
             return node
         else:
             return node
Пример #11
0
 def _insert(node, value, insert_path):
     if insert_path[0] == '0':
         if not node.left:
             node.left = Node(value)
         else:
             node.left = Heap._insert(node.left, value, insert_path[1:])
     if insert_path[0] == '1':
         if not node.right:
             node.right = Node(value)
         else:
             node.right = Heap._insert(node.right, value, insert_path[1:])
     if insert_path[0] == '0':
         if node.left.value < node.value:
             x = node.value
             node.value = node.left.value
             node.left.value = x
             return node
         else:
             return node
     if insert_path[0] == '1':
         if node.right.value < node.value:
             x = node.value
             node.value = node.right.value
             node.right.value = x
             return node
         else:
             return node
Пример #12
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
Пример #13
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
Пример #14
0
 def _insert_helper(node, value):
     if node.value > value:
         if node.left:
             BST._insert_helper(node.left, value)
         else:
             node.left = Node(value)
     elif node.value < value:
         if node.right:
             BST._insert_helper(node.right, value)
         else:
             node.right = Node(value)
Пример #15
0
 def _insert(value, path, lbinrep):
     if len(lbinrep) == 1:
         if lbinrep[0] == 1:
             path.right = Node(value)
         if lbinrep[0] == 0:
             path.left = Node(value)
     else:
         if lbinrep[0] == 1:
             Heap._insert(value, path.right, lbinrep[1:])
         if lbinrep[0] == 0:
             Heap._insert(value, path.left, lbinrep[1:])
Пример #16
0
 def _insert(value, node):
     if value < node.value:
         if node.left:
             BST._insert(value, node.left)
         else:
             node.left = Node(value)
     elif value > node.value:
         if node.right:
             BST._insert(value, node.right)
         else:
             node.right = Node(value)
Пример #17
0
 def _insert(value, pos_bin, node):
     if pos_bin:
         if pos_bin[0] == '0':
             if node.left:
                 Heap._insert(value, pos_bin[1:], node.left)
             else:
                 node.left = Node(value)
         else:
             if node.right:
                 Heap._insert(value, pos_bin[1:], node.right)
             else:
                 node.right = Node(value)
Пример #18
0
 def _insert(value, node):
     if value < node.value:
         if node.left is None:
             node.left = Node(value)
         else:
             BST._insert(value, node.left)
     elif value > node.value:
         if node.right is None:
             node.right = Node(value)
         else:
             BST._insert(value, node.right)
     else:
         return None
Пример #19
0
 def _insert(value, node):
     if value < node.value:
         if node.left:
             return AVLTree._insert(value, node.left)
         else:
             node.left = Node(value)
     elif value > node.value:
         if node.right:
             return AVLTree._insert(value, node.right)
         else:
             node.right = Node(value)
     else:
         return
Пример #20
0
 def _insert(value, node):
     if value < node.value:
         if node.left is None:
             node.left = Node(value)
         else:
             BST._insert(value, node.left)
     elif value > node.value:
         if node.right is None:
             node.right = Node(value)
         else:
             BST._insert(value, node.right)
     else:
         print("value is already present in tree")
Пример #21
0
 def _insert(value, node):
     if value > node.value:
         if node.right is None:
             node.right = Node(value)
         else:
             BST._insert(value, node.right)
     elif value < node.value:
         if node.left is None:
             node.left = Node(value)
         else:
             BST._insert(value, node.left)
     elif value == node.value:
         print("value already in the tree - duplicate")
Пример #22
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
Пример #23
0
 def _insert(value, node):
     if value < node.value:
         if not node.left:
             node.left = Node(value)
         else:
             BST._insert(value, node.left)
     elif value > node.value:
         if not node.right:
             node.right = Node(value)
         else:
             BST._insert(value, node.right)
     else:
         print("Cannot insert value")
Пример #24
0
 def _insert(value, node):
     if node.value >= value:
         if node.left:
             BST._insert(value, node.left)
         else:
             node.left = Node(value)
             return
     elif node.value < value:
         if node.right:
             BST._insert(value, node.right)
         else:
             node.right = Node(value)
             return
Пример #25
0
 def _insert(node, value):
     if value < node.value:
         if node.left is None:
             node.left = Node(value)
         else:
             BST._insert(node.left, value)
     if value > node.value:
         if node.right is None:
             node.right = Node(value)
         else:
             BST._insert(node.right, value)
     if value == node.value:
         pass
Пример #26
0
 def _insert(value, node):
     if value < node.value:
         if node.left is None:
             node.left = Node(value)
         else:
             BST._insert(value, node.left)
     elif value > node.value:
         if node.right is None:
             node.right = Node(value)
         else:
             BST._insert(value, node.right)
     else:
         print("Value in Tree")
Пример #27
0
 def go(node):
     if value < node.value:
         if node.left is None:
             node.left = Node(value)
         else:
             node.left = go(node.left)
     elif value > node.value:
         if node.right is None:
             node.right = Node(value)
         else:
             node.right = go(node.right)
     node = AVLTree._rebalance(node)
     return node
Пример #28
0
 def _insert(value, node):
     if value < node.value:
         if node.left:
             BST._insert(value, node.left)
         else:
             node.left = Node(value)
     elif value > node.value:
         if node.right:
             BST._insert(value, node.right)
         else:
             node.right = Node(value)
     else:
         print('Value already in BST.')
Пример #29
0
 def _insert(node, value):
     '''
     Helper function for insert
     '''
     if node.value < value:
         if node.right is not None:
             BST._insert(node.right, value)
         else:
             node.right = Node(value)
     elif node.value > value:
         if node.left is not None:
             BST._insert(node.left, value)
         else:
             node.left = Node(value)
Пример #30
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