递归实现前序遍历,中序遍历,后续遍历。

This commit is contained in:
建峰 2024-06-23 16:30:22 +08:00
parent 3589b1e069
commit 6e953cb553
3 changed files with 37 additions and 10 deletions

View File

@ -124,10 +124,10 @@ struct _tree
// ----- print ----- // ----- print -----
// traversal depth // traversal depth
void (*preorder)(struct _tree* self, struct _tree_node* root); void (*preorder)(struct _tree* self, struct _tree_node* root);
void (*inorder)(struct _tree* self); void (*inorder)(struct _tree* self, struct _tree_node* root);
void (*postorder)(struct _tree* self); void (*postorder)(struct _tree* self, struct _tree_node* root);
// traversal breadth // traversal breadth
void (*breadth)(struct _tree* self); void (*breadth)(struct _tree* self, struct _tree_node* root);
void (*print_obj)(void* obj); void (*print_obj)(void* obj);
}; };

View File

@ -1588,29 +1588,47 @@ void tree_destory(struct _tree* self)
void tree_avl_preorder(struct _tree* self, struct _tree_node* root) void tree_avl_preorder(struct _tree* self, struct _tree_node* root)
{ {
assert(self != NULL); assert(self != NULL);
self->print_obj(root->obj);
if(root->left != NULL) if(root->left != NULL)
{ {
tree_avl_preorder(self, root->left); tree_avl_preorder(self, root->left);
} }
self->print_obj(root->obj);
if(root->right != NULL) if(root->right != NULL)
{ {
tree_avl_preorder(self, root->right); 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 // traversal breadth
void tree_avl_breadth(struct _tree* self) void tree_avl_breadth(struct _tree* self, struct _tree_node* root)
{ {
} }

View File

@ -270,7 +270,8 @@ void tree_test(void)
void test_tree_num(void) void test_tree_num(void)
{ {
uint32_t i = 0; 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; int temp = 0;
uint32_t len = sizeof(data) / sizeof(data[0]); uint32_t len = sizeof(data) / sizeof(data[0]);
@ -290,6 +291,14 @@ void test_tree_num(void)
tree->preorder(tree, tree->_root); tree->preorder(tree, tree->_root);
printf("\n"); 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); tree_free(tree);
} }