mirror of
https://gitee.com/apaki/unicstl.git
synced 2025-05-17 19:41:36 +08:00
递归实现前序遍历,中序遍历,后续遍历。
This commit is contained in:
parent
3589b1e069
commit
6e953cb553
@ -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);
|
||||
};
|
||||
|
30
src/tree.c
30
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)
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user