/* File: trees.c
 * Author: Jim Mayfield
 */

#include <stdlib.h>
#include <assert.h>

typedef void *tree_item_type;

#include "trees.h"

typedef struct tree_tag {
  tree_item_type data;
  tree_type left;
  tree_type right;
} tree_struct_type;

tree_type
tree_cons(tree_item_type value, tree_type left, tree_type right)
{
  tree_type result;
  
  result = malloc(sizeof(tree_struct_type));
  assert(result != NULL);
  result->data = value;
  result->left = left;
  result->right = right;
  return(result);
}

tree_item_type
tree_data(tree_type tree)
{
  assert(tree != the_empty_tree);
  return(tree->data);
}

tree_type
left_child(tree_type tree)
{
  assert(tree != the_empty_tree);
  return(tree->left);
}

tree_type
right_child(tree_type tree)
{
  assert(tree != the_empty_tree);
  return(tree->right);
}

BOOL
empty_tree(tree_type tree)
{
  return(tree == the_empty_tree);
}

