diff --git a/doc/unicstl.md b/doc/unicstl.md index e69de29..974a4d0 100644 --- a/doc/unicstl.md +++ b/doc/unicstl.md @@ -0,0 +1,62 @@ + + +# tree +日志 +``` +----- unicstl test ----- + + +----- test_tree_num ----- +----- insert ----- +insert = ( 5 ) size = 1 : ( 5 ) +insert = ( 2 ) size = 2 : ( 5 ) ( 2 ) +insert = ( 3 ) size = 3 : ( 3 ) ( 2 ) ( 5 ) +insert = ( 1 ) size = 4 : ( 3 ) ( 2 ) ( 1 ) ( 5 ) +insert = ( 7 ) size = 5 : ( 3 ) ( 2 ) ( 1 ) ( 5 ) ( 7 ) +insert = ( 8 ) size = 6 : ( 3 ) ( 2 ) ( 1 ) ( 7 ) ( 5 ) ( 8 ) +insert = ( 6 ) size = 7 : ( 3 ) ( 2 ) ( 1 ) ( 7 ) ( 5 ) ( 6 ) ( 8 ) +insert = ( 4 ) size = 8 : ( 3 ) ( 2 ) ( 1 ) ( 7 ) ( 5 ) ( 4 ) ( 6 ) ( 8 ) +insert = ( 9 ) size = 9 : ( 3 ) ( 2 ) ( 1 ) ( 7 ) ( 5 ) ( 4 ) ( 6 ) ( 8 ) ( 9 ) +insert = (10 ) size = 10 : ( 3 ) ( 2 ) ( 1 ) ( 7 ) ( 5 ) ( 4 ) ( 6 ) ( 9 ) ( 8 ) (10 ) +insert = (12 ) size = 11 : ( 7 ) ( 3 ) ( 2 ) ( 1 ) ( 5 ) ( 4 ) ( 6 ) ( 9 ) ( 8 ) (10 ) (12 ) +insert = (11 ) size = 12 : ( 7 ) ( 3 ) ( 2 ) ( 1 ) ( 5 ) ( 4 ) ( 6 ) ( 9 ) ( 8 ) (11 ) (10 ) (12 ) +insert = (15 ) size = 13 : ( 7 ) ( 3 ) ( 2 ) ( 1 ) ( 5 ) ( 4 ) ( 6 ) (11 ) ( 9 ) ( 8 ) (10 ) (12 ) (15 ) +insert = (14 ) size = 14 : ( 7 ) ( 3 ) ( 2 ) ( 1 ) ( 5 ) ( 4 ) ( 6 ) (11 ) ( 9 ) ( 8 ) (10 ) (14 ) (12 ) (15 ) +insert = (13 ) size = 15 : ( 7 ) ( 3 ) ( 2 ) ( 1 ) ( 5 ) ( 4 ) ( 6 ) (11 ) ( 9 ) ( 8 ) (10 ) (14 ) (12 ) (13 ) (15 ) +----- preorder ----- +( 7 ) ( 3 ) ( 2 ) ( 1 ) ( 5 ) ( 4 ) ( 6 ) (11 ) ( 9 ) ( 8 ) (10 ) (14 ) (12 ) (13 ) (15 ) +----- inorder ----- +( 1 ) ( 2 ) ( 3 ) ( 4 ) ( 5 ) ( 6 ) ( 7 ) ( 8 ) ( 9 ) (10 ) (11 ) (12 ) (13 ) (14 ) (15 ) +----- postorder ----- +( 1 ) ( 2 ) ( 4 ) ( 6 ) ( 5 ) ( 3 ) ( 8 ) (10 ) ( 9 ) (13 ) (12 ) (15 ) (14 ) (11 ) ( 7 ) +----- breadth ----- +( 7 ) ( 3 ) (11 ) ( 2 ) ( 5 ) ( 9 ) (14 ) ( 1 ) ( 4 ) ( 6 ) ( 8 ) (10 ) (12 ) (15 ) (13 ) +----- right priority ----- +----- preorder(right) ----- +( 7 ) (11 ) (14 ) (15 ) (12 ) (13 ) ( 9 ) (10 ) ( 8 ) ( 3 ) ( 5 ) ( 6 ) ( 4 ) ( 2 ) ( 1 ) +----- inorder(right) ----- +(15 ) (14 ) (13 ) (12 ) (11 ) (10 ) ( 9 ) ( 8 ) ( 7 ) ( 6 ) ( 5 ) ( 4 ) ( 3 ) ( 2 ) ( 1 ) +----- postorder(right) ----- +(15 ) (13 ) (12 ) (14 ) (10 ) ( 8 ) ( 9 ) (11 ) ( 6 ) ( 4 ) ( 5 ) ( 1 ) ( 2 ) ( 3 ) ( 7 ) +----- breadth(right) ----- +( 7 ) (11 ) ( 3 ) (14 ) ( 9 ) ( 5 ) ( 2 ) (15 ) (12 ) (10 ) ( 8 ) ( 6 ) ( 4 ) ( 1 ) (13 ) +----- left priority ----- +----- preorder ----- +( 7 ) ( 3 ) ( 2 ) ( 1 ) ( 5 ) ( 4 ) ( 6 ) (11 ) ( 9 ) ( 8 ) (10 ) (14 ) (12 ) (13 ) (15 ) +delete = ( 5 ) size = 14 : ( 7 ) ( 3 ) ( 2 ) ( 1 ) ( 6 ) ( 4 ) (11 ) ( 9 ) ( 8 ) (10 ) (14 ) (12 ) (13 ) (15 ) +delete = ( 2 ) size = 13 : ( 7 ) ( 3 ) ( 1 ) ( 6 ) ( 4 ) (11 ) ( 9 ) ( 8 ) (10 ) (14 ) (12 ) (13 ) (15 ) +delete = ( 3 ) size = 12 : ( 7 ) ( 4 ) ( 1 ) ( 6 ) (11 ) ( 9 ) ( 8 ) (10 ) (14 ) (12 ) (13 ) (15 ) +delete = ( 1 ) size = 11 : (11 ) ( 7 ) ( 4 ) ( 6 ) ( 9 ) ( 8 ) (10 ) (14 ) (12 ) (13 ) (15 ) +delete = ( 7 ) size = 10 : (11 ) ( 8 ) ( 4 ) ( 6 ) ( 9 ) (10 ) (14 ) (12 ) (13 ) (15 ) +delete = ( 8 ) size = 9 : (11 ) ( 9 ) ( 4 ) ( 6 ) (10 ) (14 ) (12 ) (13 ) (15 ) +delete = ( 6 ) size = 8 : (11 ) ( 9 ) ( 4 ) (10 ) (14 ) (12 ) (13 ) (15 ) +delete = ( 4 ) size = 7 : (11 ) ( 9 ) (10 ) (14 ) (12 ) (13 ) (15 ) +delete = ( 9 ) size = 6 : (12 ) (11 ) (10 ) (14 ) (13 ) (15 ) +delete = (10 ) size = 5 : (12 ) (11 ) (14 ) (13 ) (15 ) +delete = (12 ) size = 4 : (13 ) (11 ) (14 ) (15 ) +delete = (11 ) size = 3 : (14 ) (13 ) (15 ) +delete = (15 ) size = 2 : (14 ) (13 ) +delete = (14 ) size = 1 : (13 ) +delete = (13 ) size = 0 : +----- empty ----- +``` diff --git a/src/tree.c b/src/tree.c index 5543ef4..f0b2a89 100644 --- a/src/tree.c +++ b/src/tree.c @@ -10,6 +10,7 @@ */ #include "tree.h" #include "queue.h" +#include "stack.h" #if RAVLTREE == 1 // function declare @@ -1947,6 +1948,7 @@ void tree_order(struct _tree* self, bool right_priority) void tree_avl_preorder(struct _tree* self, struct _tree_node* root) { +#if 0 assert(self != NULL); if(root == NULL) { @@ -1977,6 +1979,47 @@ void tree_avl_preorder(struct _tree* self, struct _tree_node* root) tree_avl_preorder(self, root->left); } } +#else + assert(self != NULL); + if(root == NULL) + { + return; + } + struct _tree_node* node = NULL; + + stack_t stack = stack_new(); + stack_init(stack, sizeof(struct _tree_node*)); + stack->push(stack, &root); + while(!stack->empty(stack)) + { + stack->pop(stack, &node); + if(!self->_right_priority) // left priority + { + self->print_obj(node->obj); + if(node->right != NULL) + { + stack->push(stack, &node->right); + } + if(node->left != NULL) + { + stack->push(stack, &node->left); + } + } + else + { + self->print_obj(node->obj); + if(node->left != NULL) + { + stack->push(stack, &node->left); + } + if(node->right != NULL) + { + stack->push(stack, &node->right); + } + } + } + stack_free(stack); +#endif } void tree_avl_inorder(struct _tree* self, struct _tree_node* root)