コード例 #1
0
ファイル: test.py プロジェクト: dalianzhu/python_avltree
def test_case_3():
    """
    tree:
        8
       5  9
           10

    the tree removed 10 will becomes:
        8
       5 9
    """
    debug("test case 3")
    tree = AvlTree()
    test_data = [8, 5, 9, 10]
    for item in test_data:
        temp_node = AvlTreeNode()
        temp_node.value = item
        tree.add(temp_node)
    dele_node = tree.root.right.right
    tree.delete(dele_node)
    debug("    {}({})".format(tree.root.value, tree.root.balance_factor))
    l1_1 = tree.root.left
    l1_2 = tree.root.right
    debug("   /   \\")
    debug(" %s(%s)    %s(%s)" % (l1_1.value, l1_1.balance_factor, l1_2.value, l1_2.balance_factor))

    assert tree.root.right.value == 9
    assert tree.root.right.balance_factor == 0
コード例 #2
0
ファイル: test.py プロジェクト: dalianzhu/python_avltree
def test_case_1():
    """
    result:
          2
        1   4
           3 5
    """
    debug("test case 1")
    tree = AvlTree()
    test_data = [1, 2, 3, 4, 5]
    for item in test_data:
        temp_node = AvlTreeNode()
        temp_node.value = item
        tree.add(temp_node)

    assert tree.root.value == 2
    assert tree.root.right.right.value == 5
コード例 #3
0
ファイル: test.py プロジェクト: dalianzhu/python_avltree
def test_case_7():
    """
    build a tree like :
          8
         5 8
            8
    and rm the node 5.
    result will be :
          8
         8 8
    """
    debug("test case 7")
    tree = AvlTree()
    test_data = [8, 5, 8, 8]
    for item in test_data:
        temp_node = AvlTreeNode()
        temp_node.value = item
        tree.add(temp_node)

    dele_node = tree.root.left
    tree.delete(dele_node)

    assert tree.root.value == 8
    assert tree.root.balance_factor == 0
    debug("     {}({})".format(tree.root.value, tree.root.balance_factor))
    debug("{}({})   {}({})".format(tree.root.left.value, tree.root.left.balance_factor,
                                   tree.root.right.value, tree.root.right.balance_factor))
コード例 #4
0
ファイル: test.py プロジェクト: dalianzhu/python_avltree
def test_case_6():
    """
    this tree is like:
         10                       10            10           10
        / \                      /  \          / \          / \
       6  12                    3   12        3  12        7  12
      / \  \     -- rm 6 -->   / \   \   -->   \  \  -->  / \  \
     3  7  14                 3  7   14        7  14     3  8  14
         \                       \             \
         8                       8             8
    """

    debug("test case 6")
    tree = AvlTree()
    test_data = [10, 6, 12, 14, 3, 7, 8]
    for item in test_data:
        temp_node = AvlTreeNode()
        temp_node.value = item
        tree.add(temp_node)

    dele_node = tree.root.left
    tree.delete(dele_node)

    debug("      {}({})".format(tree.root.value, tree.root.balance_factor))
    l1_1 = tree.root.left
    l1_2 = tree.root.right
    debug("   {}({})    {}({})".format(l1_1.value, l1_1.balance_factor, l1_2.value, l1_2.balance_factor))

    l2_1 = l1_1.left
    l2_2 = l1_1.right
    l2_4 = l1_2.right
    debug("{}({})  {}({})    {}({})".format(l2_1.value, l2_1.balance_factor,
                                            l2_2.value, l2_2.balance_factor,
                                            l2_4.value, l2_4.balance_factor))

    assert tree.root.left.left.value == 3
    assert tree.root.right.balance_factor == -1
コード例 #5
0
ファイル: test.py プロジェクト: dalianzhu/python_avltree
def test_case_4():
    """
    if arr [8, 5, 9, 10,4,3,6] added in a tree one by one.
    finally the tree will be :
          8
        /  \
       4   9
      / \   \
     3  5   10
        \
        6

    and then, remove 9, because node 9 only has single child, so
    9's child will replace 9's location like:

          8
        /  \
       4   10
      / \
     3  5
        \
        6
    and the tree(the rotnode is 8) need to be rebalanced.

    the result will be:

             5(0)
           /      \
        4(1)      8(0)
         /      /   \
      3(0)    6(0)  10(0)
    """
    debug("test case 4")
    tree = AvlTree()
    test_data = [8, 5, 9, 10, 4, 3, 6]
    for item in test_data:
        temp_node = AvlTreeNode()
        temp_node.value = item
        tree.add(temp_node)

    dele_node = tree.root.right
    tree.delete(dele_node)

    debug("     {}({})".format(tree.root.value, tree.root.balance_factor))
    debug("   /       \\")
    l1_1 = tree.root.left
    l1_2 = tree.root.right
    debug("%s(%s)       %s(%s)" % (l1_1.value, l1_1.balance_factor, l1_2.value, l1_2.balance_factor))
    debug("  /          / \\")
    l2_1 = l1_1.left
    l2_3 = l1_2.left
    l2_4 = l1_2.right
    debug(" %s(%s)      %s(%s)   %s(%s)   " % (
        l2_1.value, l2_1.balance_factor, l2_3.value, l2_3.balance_factor, l2_4.value, l2_4.balance_factor))
コード例 #6
0
ファイル: test.py プロジェクト: dalianzhu/python_avltree
def test_case_2():
    debug("test case 2")
    tree = AvlTree()
    test_data = [8, 5, 9, 10, 3, 6, 7]
    for item in test_data:
        temp_node = AvlTreeNode()
        temp_node.value = item
        tree.add(temp_node)
    # this tree is :
    #             8
    #           5   9
    #          3 6   10
    #             7
    #
    # remove 3
    # the tree will becomes:
    #             8
    #           6   9
    #          5 7   10

    dele_node = tree.root.left.left
    tree.delete(dele_node)
    debug("    {}({})".format(tree.root.value, tree.root.balance_factor))
    l1_1 = tree.root.left
    l1_2 = tree.root.right
    debug("   /   \\")
    debug(" %s(%s)    %s(%s)" % (l1_1.value, l1_1.balance_factor, l1_2.value, l1_2.balance_factor))

    l2_1 = l1_1.left
    l2_2 = l1_1.right
    l2_4 = l1_2.right
    debug("/ \\       \\")
    debug("%s %s        %s" % (l2_1.value, l2_2.value, l2_4.value))

    assert tree.root.value == 8
    assert tree.root.right.value == 9
    assert tree.root.right.balance_factor == -1
    assert tree.root.left.right.value == 7
    assert tree.root.left.right.balance_factor == 0
コード例 #7
0
ファイル: test.py プロジェクト: dalianzhu/python_avltree
def test_case_5():
    """
    will build a tree like:
         5(0)
       /     \
    4(1)     8(0)
     /      /   \
    3(0)   6(0) 10(0)
    """
    debug("test case 5")
    tree = AvlTree()
    test_data = [8, 4, 10, 3, 5, 6]
    for item in test_data:
        temp_node = AvlTreeNode()
        temp_node.value = item
        tree.add(temp_node)

    debug("    {}({})".format(tree.root.value, tree.root.balance_factor))
    debug("   /      \\")
    l1_1 = tree.root.left
    l1_2 = tree.root.right
    debug("%s(%s)        %s(%s)" % (l1_1.value, l1_1.balance_factor, l1_2.value, l1_2.balance_factor))
    debug(" /          /    \\")
    l2_1 = l1_1.left
    l2_3 = l1_2.left
    l2_4 = l1_2.right
    debug("%s(%s)       %s(%s)   %s(%s)" % (l2_1.value, l2_1.balance_factor
                                            , l2_3.value, l2_3.balance_factor
                                            , l2_4.value, l2_4.balance_factor))

    assert tree.root.left.left.value == 3
    assert tree.root.left.balance_factor == 1
    assert l2_4.value == 10