#ifndef __BST_WCOUNT__
#define __BST_WCOUNT__ 1

typedef struct BTnode btnode;
typedef struct BSTree bstree;


struct BTnode {
    btnode *parent;
    btnode *left;
    btnode *right;
    char *key;
    int count;
};

struct BSTree {
    btnode *ROOT;
};


void inorder_tree_walk(btnode *x);
btnode *tree_search(btnode *x, char *key);
btnode *iterative_tree_search(btnode *x, char *key);
btnode *tree_minimum(btnode *x);
btnode *tree_maximum(btnode *x);
btnode *tree_successor(btnode *x);
btnode *tree_predecessor(btnode *x);
void tree_insert(bstree *T, btnode *z);
void transplant(bstree *T, btnode *u, btnode *v);
void tree_delete(bstree *T, btnode *z);

btnode *make_btnode(char *key);



#endif

