def bn1(): tree = BinaryTree() root = Node("150") node_100 = Node("100") node_250 = Node("250") node_75 = Node("75") node_160 = Node("160") node_200 = Node("200") node_350 = Node("350") node_125 = Node("125") node_175 = Node("175") node_300 = Node("300") node_500 = Node("500") tree.root = root root.left = node_100 root.right = node_250 node_100.left = node_75 node_100.right = node_160 node_250.left = node_200 node_250.right = node_350 node_160.left = node_125 node_160.right = node_175 node_350.left = node_300 node_350.right = node_500 return tree
def bn2(): tree = BinaryTree() root = Node("42") node_100 = Node("100") node_600 = Node("600") node_15 = Node("15") node_160 = Node("160") node_200 = Node("200") node_350 = Node("350") node_125 = Node("125") node_175 = Node("175") node_4 = Node("4") node_500 = Node("500") tree.root = root root.left = node_100 root.right = node_600 node_100.left = node_15 node_100.right = node_160 node_600.left = node_200 node_600.right = node_350 node_160.left = node_125 node_160.right = node_175 node_350.left = node_4 node_350.right = node_500 return tree
def test_max_value(): node = BinaryNode(23) tree = BinaryTree(node) BinarySearchTree.add(tree, 8) BinarySearchTree.add(tree, 42) BinarySearchTree.add(tree, 9) BinarySearchTree.add(tree, 10) BinarySearchTree.add(tree, 5) actual = tree.max_value() expected = 42 assert actual == expected
def test_post_order_collection(): node = BinaryNode(23) tree = BinaryTree(node) BinarySearchTree.add(tree, 8) BinarySearchTree.add(tree, 42) BinarySearchTree.add(tree, 9) BinarySearchTree.add(tree, 10) BinarySearchTree.add(tree, 5) tree.post_order() actual = tree.collect expected = [5, 10, 9, 8, 42, 23] assert actual == expected
def bn_tree_ub(): tree = BinaryTree() a = Node('A') b = Node('B') c = Node('C') d = Node('D') tree.root = a a.left = b a.right = c b.right = d return tree
def test_pre_order_collection(): node = BinaryNode(23) tree = BinaryTree(node) BinarySearchTree.add(tree, 8) BinarySearchTree.add(tree, 42) BinarySearchTree.add(tree, 9) BinarySearchTree.add(tree, 10) BinarySearchTree.add(tree, 5) tree.pre_order() actual = tree.collect expected = [23, 8, 5, 9, 10, 42] assert actual == expected
def bt1(self): bt1 = BT() bt1.add(1) bt1.add(2) bt1.add(3) bt1.add(4) bt1.add(5) bt1.add(6) bt1.add(7) return bt1
def build_parse_tree(expr): tokens = expr.split() stack = Stack() tree = BinaryTree('') stack.push(tree) current_tree = tree for token in tokens: if token == '(': current_tree.insert_left('') stack.push(current_tree) current_tree = current_tree.get_left_child() # If token is an operand (e.g. a number) elif token not in ['+', '-', '*', '/', ')']: try: current_tree.set_root(int(token)) parent = stack.pop() current_tree = parent except ValueError: raise ValueError(f'Token {token} is not a valid integer') elif token in ['+', '-', '*', '/']: current_tree.set_root(token) current_tree.insert_right('') stack.push(current_tree) current_tree = current_tree.get_right_child() elif token == ')': current_tree = stack.pop() return tree
def bn_mixed_tree(): tree = BinaryTree() a = Node(6) b = Node(75) c = Node(34) d = Node(12) e = Node(1) f = Node(100) tree.root = a a.left = b a.right = c b.left = d b.right = e c.left = f return tree
def bn_tree(): tree = BinaryTree() a = Node('A') b = Node('B') c = Node('C') d = Node('D') e = Node('E') f = Node('F') tree.root = a a.left = b a.right = c b.left = d b.right = e c.left = f return tree
def test_binary_tree_children(): node_a = Node('A') node_b = Node('B') node_c = Node('C') tree = BinaryTree(node_b) tree.root.left = node_b tree.root.right = node_c assert tree.root.left.value == 'B' assert tree.root.right.value == 'C'
def test_breadth_first(): a = BinaryNode(1) b = BinaryNode(3) c = BinaryNode(4) d = BinaryNode(2) e = BinaryNode(7) tree = BinaryTree(a) tree.root.left = b tree.root.right = c c.left = d c.right = e actual = tree.breadth_first() expected = [1, 3, 4, 2, 7] assert actual == expected
def bt2(self): bt2 = BT() bt2.add(1) bt2.add(3) bt2.add(4) bt2.add(4) bt2.add(5) bt2.add(6) return bt2
def test_root_right_left(): node = BinaryNode(23) tree = BinaryTree(node) BinarySearchTree.add(tree, 8) BinarySearchTree.add(tree, 42) actual = tree.root.left.value expected = 8 assert actual == expected actual = tree.root.right.value expected = 42 assert actual == expected
def test_tree_intersection_one_empty(bn1): assert tree_intersection(bn1, BinaryTree()) == []
def test_tree_intersection_no_matches(self): bt1 = BT() bt1.add('five') bt1.add('four') bt1.add('three') bt1.add('two') bt1.add('one') bt2 = BT() bt2.add(5) bt2.add(4) bt2.add(3) bt2.add(2) bt2.add(1) assert ti(bt1, bt2) == set()
def test_binary_tree_breadth_first_empty(): actual = breadth(BinaryTree()) expected = [] assert actual == expected
def test_binary_tree_root(): node = Node('A') tree = BinaryTree(node) actual = tree.root.value expected = node.value assert actual == expected
def test_empty_tree(): tree = BinaryTree() actual = tree.root expected = None assert actual == expected
def test_root_only(): node = BinaryNode(23) tree = BinaryTree(node) actual = tree.root.value expected = 23 assert actual == expected
def test_tree_intersection_both_empty(): assert tree_intersection(BinaryTree(), BinaryTree()) == []