btree_a_test.py

#!/usr/bin/python3
# ==================================================================
# collect statistics about building binary trees
# ==================================================================

from random import randint
from random import sample
import unittest
import timeit
import numpy as np

import btree_a as bt


# ---- create a tree -----------------------------------------------

def create_tree(tree,values):
    for i in values:
        tree.insert(bt.Node(i))

# ---- create random node values -----------------------------------
# ---- without replacement - no duplicates -------------------------

def create_random_node_values(elms=20,maxint=99):
    print('create tree with random nodes - no duplicates')
    values = sample(range(1,maxint),elms)
    return values

# ------------------------------------------------------------------
# main test
# ------------------------------------------------------------------

values = create_random_node_values(100,10000)

tree = bt.BinaryTree()

start = timeit.timeit()

create_tree(tree,values)

end = timeit.timeit()

##tree.print_tree_values()
##tree.print_tree_nodes()
##tree.print_tree_structure()

height1 = tree.max_height()
count1  = tree.count_nodes()

print('\nun-balanced tree height={}  count={}'.format(height1,count1))
print('\nend={:.6f}, start={:.6f}, end-start={:.6f}'.
    format(end,start,end-start))

print('\n------------------------------------------------------------')

tree = None

tree = bt.BinaryTree()

start = timeit.timeit()

create_tree(tree,values)

tree.balance()

end = timeit.timeit()

##tree.print_tree_values()
##tree.print_tree_nodes()
##tree.print_tree_structure()

height2 = tree.max_height()
count2  = tree.count_nodes()

print('\nbalanced tree height={}  count={}'.format(height2,count2))
print('\nend={:.6f}, start={:.6f}, end-start={:.6f}'.
    format(end,start,end-start))