#include #include typedef struct TreeNode Node; struct TreeNode { int value; int count; Node *left; Node *right; }; Node *find(Node *, int); Node *insert(Node *, int); Node *tree(int, int, Node *, Node *); void printTree(Node *); int main(void) { int k; Node *root; root = NULL; printf("data? "); if (scanf("%d", &k) < 1) return 0; while (1) { root = insert(root, k); printTree(root); printf("\n"); printf("data? "); if (scanf("%d", &k) < 1) return 0; } printTree(root); printf("\n"); } Node *find(Node *bt, int k) { if(bt==NULL){ return NULL; } else if (k==bt->value){ return bt; }else if(kvalue){ if(bt->left==NULL){ return bt; }else{ return find(bt->left,k); } }else{ if(bt->right==NULL){ return bt; }else{ return find(bt->right,k); } } } Node *insert(Node *bt, int k) { Node *result=bt,*tmp; tmp=find(bt,k); if(tmp==NULL){ result=tree(k,1,NULL,NULL); }else if(tmp->value==k){ tmp->count++; }else if (kvalue){ tmp->left=tree(k,1,NULL,NULL); }else{ tmp->right=tree(k,1,NULL,NULL); } return result; } void printTree(Node *t) { printf("["); if (t != NULL) { printTree(t->left); printf(", (%d,%d), ", t->value, t->count); printTree(t->right); } printf("]"); } Node *tree(int k, int c, Node *l, Node *r) { Node *w; if ((w = (Node *) malloc(sizeof(Node))) == NULL) { fprintf(stderr, "tree: cannot allocate\n"); exit(1); } w->value = k; w->count = c; w->left = l; w->right = r; return w; }