/* * Print the values in an AVL tree in preorder */ int print_avl(avl_p root, avl_p parent) { int count = 0; if (!root) { log(ERROR, "root invalid.\n"); return -1; } ++count; /* Print data value in the node */ log(INFO, "data: %6d, parent: %6d\n", root->data, parent->data); if (root->left) { log(INFO, "LEFT.\n"); count += print_avl(root->left, root); } if (root->right) { log(INFO, "RIGHT.\n"); count += print_avl(root->right, root); } return count; }
void print_avl( const struct avl_node* node ) { //printf("print_avl\n"); if(node == NULL) return ; printf( "%s " , ((char *)node->avl_data)); if(node->avl_link[0] != NULL || node->avl_link [1] != NULL) { putchar ('(') ; print_avl(node->avl_link[0]) ; putchar (',') ; putchar (' ') ; print_avl(node->avl_link[1]) ; putchar (')') ; } }
int main() { struct avl_table* avl_tree; struct bst_table* bst_tree; struct rb_table* rb_tree; char* input_str[STR_NUM]; char buf[BUF_SIZE]; void** p[3]; int str_length; avl_tree = avl_create( str_cmp , NULL, NULL) ; bst_tree = bst_create( str_cmp, NULL , NULL); rb_tree = rb_create(str_cmp, NULL , NULL); // input string for(int i=0;i<STR_NUM;i++){ if(fgets(buf, BUF_SIZE , stdin)!= NULL) { str_length = strlen(buf)-1; input_str[i] = malloc(str_length*sizeof(char)); strncpy(input_str[i],buf,str_length); //printf("%s\n",input_str[i]); p[0] = avl_probe( avl_tree , input_str[i]); p[1] = bst_probe( bst_tree , input_str[i]); p[2] = rb_probe( rb_tree , input_str[i]); } } print_avl(avl_tree->avl_root); printf("\n"); print_bst(bst_tree->bst_root); printf("\n"); print_rb(rb_tree->rb_root); printf("\n"); return 0; }