diff --git a/include/tree.h b/include/tree.h index 92cd635..c670151 100644 --- a/include/tree.h +++ b/include/tree.h @@ -124,10 +124,10 @@ struct _tree // ----- print ----- // traversal depth void (*preorder)(struct _tree* self, struct _tree_node* root); - void (*inorder)(struct _tree* self); - void (*postorder)(struct _tree* self); + void (*inorder)(struct _tree* self, struct _tree_node* root); + void (*postorder)(struct _tree* self, struct _tree_node* root); // traversal breadth - void (*breadth)(struct _tree* self); + void (*breadth)(struct _tree* self, struct _tree_node* root); void (*print_obj)(void* obj); }; diff --git a/src/tree.c b/src/tree.c index 1518563..54e0a1a 100644 --- a/src/tree.c +++ b/src/tree.c @@ -1588,29 +1588,47 @@ void tree_destory(struct _tree* self) void tree_avl_preorder(struct _tree* self, struct _tree_node* root) { assert(self != NULL); + self->print_obj(root->obj); if(root->left != NULL) { tree_avl_preorder(self, root->left); } - self->print_obj(root->obj); if(root->right != NULL) { tree_avl_preorder(self, root->right); } } -void tree_avl_inorder(struct _tree* self) +void tree_avl_inorder(struct _tree* self, struct _tree_node* root) { - + assert(self != NULL); + if(root->left != NULL) + { + tree_avl_inorder(self, root->left); + } + self->print_obj(root->obj); + if(root->right != NULL) + { + tree_avl_inorder(self, root->right); + } } -void tree_avl_postorder(struct _tree* self) +void tree_avl_postorder(struct _tree* self, struct _tree_node* root) { - + assert(self != NULL); + if(root->left != NULL) + { + tree_avl_postorder(self, root->left); + } + if(root->right != NULL) + { + tree_avl_postorder(self, root->right); + } + self->print_obj(root->obj); } // traversal breadth -void tree_avl_breadth(struct _tree* self) +void tree_avl_breadth(struct _tree* self, struct _tree_node* root) { } diff --git a/test/tree_test.c b/test/tree_test.c index 5af5fb6..2e4641b 100644 --- a/test/tree_test.c +++ b/test/tree_test.c @@ -270,7 +270,8 @@ void tree_test(void) void test_tree_num(void) { uint32_t i = 0; - int data[] = { 1,2,3,4,5,6,7,8,9,10 }; + // int data[] = { 1,2,3,4,5,6,7,8,9,10 }; + int data[] = { 5,2,3,1,7,8,6 }; int temp = 0; uint32_t len = sizeof(data) / sizeof(data[0]); @@ -290,6 +291,14 @@ void test_tree_num(void) tree->preorder(tree, tree->_root); printf("\n"); + printf("----- inorder -----\n"); + tree->inorder(tree, tree->_root); + printf("\n"); + + printf("----- postorder -----\n"); + tree->postorder(tree, tree->_root); + printf("\n"); + tree_free(tree); }