Exemplo n.º 1
0
 def _put(self, key, val, currentNode):
     if key < currentNode.key :
         if currentNode.hasLeftChild() :
             self._put(key, val, currentNode.leftChild)
         else :
             currentNode.leftChild = TreeNode(key, val, parent = currentNode)
             self.updateBalance(currentNode.leftChild)
     else :
         if currentNode.hasRightChild() :
             self._put(key, val, currentNode.rightChild)
         else :
             currentNode.rightChild = TreeNode(key, val, parent = currentNode)
             self.updateBalance(currentNode.rightChild)
Exemplo n.º 2
0
def test_node_exists_args():
    """Test Create a Tree Node."""
    from bst import TreeNode

    test_node = TreeNode(1, 2, 3)

    assert test_node
Exemplo n.º 3
0
 def insert(self, value):
     # insert new node
     tmp_node = super()._insert(value)
     # create new TreeNode with red color
     new_node = TreeNode(value) #red by default
     parent = tmp_node.get_parent()
     # take care of node-parent connection
     if not parent or value == parent.get_data():
         return
     elif value > parent.get_data():
         parent.set_right(new_node)
     elif value < parent.get_data():
         parent.set_left(new_node)
     # recolor starting from new_node till root
     self.root = self.__recolor(new_node)
     # root is black (isn't essential tho!!)
     self.root.set_color(Color.BLACK)
Exemplo n.º 4
0
def tree_node():
    from bst import TreeNode
    return TreeNode()
Exemplo n.º 5
0
    ######################### INSERTION #########################
    def insert(self, value):
        _ = super()._insert(value)
        self.rebalance()

    ######################### REMOVAL #########################
    def remove(self, del_value):
        _ = super()._remove(del_value)
        self.rebalance()


if __name__ == "__main__":
    # to test left rotation
    avl = AVL(22)
    avl.root.set_right(TreeNode(43))
    avl.root.set_left(TreeNode(18))
    avl.root.get_left().set_left(TreeNode(9))
    avl.root.get_left().set_right(TreeNode(21))
    avl.root.get_left().get_left().set_left(TreeNode(6))
    avl.root.get_left().get_left().get_left().set_left(TreeNode(0))
    print(avl, '\n')
    avl.rebalance()
    print(avl)
    print('=' * 50)

    #######################################
    # to test left-right rotation
    avl = AVL(78)
    avl.root.set_right(TreeNode(88))
    avl.root.set_left(TreeNode(50))
Exemplo n.º 6
0
 def __init__(self, value):
     if isinstance(value, TreeNode):
         self.root = value
     else:
         self.root = TreeNode(value)
     self.root.set_color(Color.BLACK)
        raise NotImplementedError("You can't check height of Splay Trees!!")

    def get_depth(self):
        raise NotImplementedError("You can't check depth of Splay Trees!!")







if __name__ == "__main__":
    # test insert
    # example from Data Structures and Algorithm in Python (page: 514)
    stree = SplayTree(8)
    stree.root.set_left(TreeNode(3))
    stree.root.get_left().set_right(TreeNode(4))
    stree.root.get_left().get_right().set_right(TreeNode(6))
    stree.root.get_left().get_right().get_right().set_left(TreeNode(5))
    stree.root.get_left().get_right().get_right().set_right(TreeNode(7))
    stree.root.set_right(TreeNode(10))
    stree.root.get_right().set_right(TreeNode(11))
    stree.root.get_right().get_right().set_right(TreeNode(12))
    stree.root.get_right().get_right().get_right().set_right(TreeNode(16))
    stree.root.get_right().get_right().get_right().get_right().set_left(TreeNode(13))
    stree.root.get_right().get_right().get_right().get_right().set_right(TreeNode(17))
    stree.insert(14)
    stree.find(13)
    print(stree)
    stree.find(8)
    print(stree)