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