コード例 #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
ファイル: Heap.py プロジェクト: cristywei/containers-hw
 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
ファイル: Heap.py プロジェクト: ohorban/containers_p
 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
ファイル: Heap.py プロジェクト: dnarula22/containers_week8
 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
ファイル: Heap.py プロジェクト: nickwilson3/containers_nick
 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
ファイル: BST.py プロジェクト: joeybodoia/data_structures
 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
ファイル: Heap.py プロジェクト: emmacgodfrey/containers2
 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
ファイル: BST.py プロジェクト: vbopardi/Week8Containers
 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
ファイル: BST.py プロジェクト: sepstein22/containers_hw
 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
ファイル: BST.py プロジェクト: kingeddy11/HW8CSCI046
 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
ファイル: BST.py プロジェクト: mariagerges/week8_containers
 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
ファイル: AVLTree.py プロジェクト: nmpatterson22/Week-08
 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
ファイル: BST.py プロジェクト: snarayan23/container_oop
 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
ファイル: BST.py プロジェクト: dustin-lind/containers-project
 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