### Data Structure Tree Solution

 `````` #include ````#include ``#include "/home/comp320/public_html/2005/assignments/support/320bool.h"``/*******************`` * Binary Tree Type`` *******************/``enum ABTree_Tag {IS_LEAF, IS_NODE};``struct ABTree {`` enum ABTree_Tag tag;`` union {`` int leaf;`` struct {`` struct ABTree * left;`` struct ABTree * right;`` } node;`` } elt;``};``typedef struct ABTree * BTree;``/*******************`` * Binary Tree Constructor Helper`` *******************/``/* Allocate one BTree structure and check for correct allocation.`` */``BTree``malloc_BTree()``{`` BTree tree = (BTree) malloc(sizeof(struct ABTree));`` if (tree == NULL) {`` fprintf(stderr,`` "malloc_BTree: Unable to allocate space for tree node.\n");`` exit(1);`` }`` return tree;``}``/*******************`` * Binary Tree Constructors`` *******************/``BTree``make_leaf(int leaf)``{`` BTree tree = malloc_BTree();`` tree->tag = IS_LEAF;`` tree->elt.leaf = leaf;`` return tree;``}``BTree``make_node(BTree left, BTree right)``{`` BTree tree = malloc_BTree();`` tree->tag = IS_NODE;`` tree->elt.node.left = left;`` tree->elt.node.right = right;`` return tree;``}``/*******************`` * Binary Tree Basic Helper Functions`` *******************/``/* Assert that this node of the tree structure is valid.`` */``void``assert_valid_BTree(BTree tree)``{`` if (tree == NULL) {`` fprintf(stderr,"Invalid tree.\n");`` exit(1);`` }``}``/*******************`` * Binary Tree Basic Predicates`` *******************/``bool``is_leaf(BTree tree)``{`` assert_valid_BTree(tree);`` return (tree->tag == IS_LEAF);``}``bool``is_node(BTree tree)``{`` assert_valid_BTree(tree);`` return (tree->tag == IS_NODE);``}``/*******************`` * Binary Tree Selectors`` *******************/``int``tree_leaf(BTree tree)``{`` if (is_leaf(tree))`` return tree->elt.leaf;`` else {`` fprintf(stderr,"Tree isn't a leaf.\n");`` exit(1);`` }``}``BTree``tree_left(BTree tree)``{`` if (is_node(tree))`` return tree->elt.node.left;`` else {`` fprintf(stderr,"Tree isn't a node.\n");`` exit(1);`` }``}``BTree``tree_right(BTree tree)``{`` if (is_node(tree))`` return tree->elt.node.right;`` else {`` fprintf(stderr,"Tree isn't a node.\n");`` exit(1);`` }``}``/*******************`` * Binary Tree Functions`` *******************/``/* Returns the sum of all the numbers in the input tree.`` */``int``sum_tree(BTree tree)``{`` assert_valid_BTree(tree);`` if (is_leaf(tree))`` return tree_leaf(tree);`` else`` return sum_tree(tree_left(tree)) + sum_tree(tree_right(tree));``}``/* Prints the tree to a single line of standard output.`` * Groups nodes' children in parentheses, with nodes separated by spaces.`` */``void``print_tree(BTree tree)``{`` assert_valid_BTree(tree);`` if (is_leaf(tree))`` printf("%d",tree_leaf(tree));`` else {`` printf(" (");`` print_tree(tree_left(tree));`` printf(" ");`` print_tree(tree_right(tree));`` printf(") ");`` }``}``/*******************`` * Main function to print the sample tree and its sum.`` *******************/``int``main(void)``{`` BTree tree = make_node(make_leaf(3),`` make_node(make_node(make_leaf(2),`` make_leaf(7)),`` make_leaf(9)));`` printf("The sum of the elements in\n");`` print_tree(tree);`` printf("\nis %d.\n",sum_tree(tree));`` return 0; /* no error */``}``A Part Of Thiyagaraaj Websites````