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

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 -----
// 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);
};

View File

@ -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)
{
}

View File

@ -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);
}